2013-04-28 83 views
5

Có một số vấn đề với một danh sách sau khi sử dụng hàm hoán vị itertools.Chuyển đổi đầu ra của itertools.permutations từ danh sách các bộ thành danh sách các chuỗi

from itertools import permutations 

def longestWord(letters): 
    combinations = list(permutations(letters)) 
    for s in combinations: 
     ''.join(s) 
    print(combinations) 

longestWord("aah") 

Kết quả trông như thế này:

[('a', 'a', 'h'), ('a', 'h', 'a'), ('a', 'a', 'h'), ('a', 'h', 'a'), 
('h', 'a', 'a'), ('h', 'a', 'a')] 

Tôi muốn đây là một danh sách đơn giản, nhưng nó dường như được sắp ra như một danh sách các hàng (?). Bất kỳ ai cũng có thể giúp tôi định dạng nội dung này để nó có dạng như sau:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 
+2

Calling hoán vị 'combinations' là khó hiểu. – DSM

Trả lời

8
from itertools import permutations 

def longestWord(letters): 
    return [''.join(i) for i in permutations(letters)] 

print(longestWord("aah")) 

Kết quả:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 

Một vài đề xuất:

  1. Không in bên trong hàm, trả về thay thế và in giá trị trả về.
  2. đặt tên của bạn biến combination là không tốt, như sự kết hợp khác với hoán vị
  3. bạn tham gia đã không làm bất cứ điều gì, tham gia không thay đổi giá trị nội tuyến, nó sẽ trả về chuỗi
  4. Các tên hàm không đại diện Những gì nó làm. từ dài nhất?
0

Permutations trả về một bộ dữ liệu có tính lặp lại để bạn cần tham gia. Bản đồ là một cách hay để thực hiện thay vì vòng lặp của bạn.

from itertools import permutations 

def longestWord(letters): 
    combinations = list(map("".join, permutations(letters))) 
    print(combinations) 

longestWord("aah") 

Cách bạn đang thực hiện, bạn đã nhập các chữ cái trong mỗi bộ vào một chuỗi nhưng bạn không thay đổi danh sách kết hợp.

0

Hãy thử điều này thay vì:

combinations = permutations(letters) 
print [''.join(x) for x in combinations] 

(. Bạn join đã không thực sự làm bất cứ điều gì hữu ích - sau khi kết hợp được thực hiện giá trị trả về của nó không được lưu)

+0

'Danh sách' ở đây mua cho bạn không có gì – Eric

+0

Có, sao chép dòng đó từ OP cho ngữ cảnh. –

0

lót

[''.join(h) for h in [list(k) for k in longestWord("aah")]] 
Các vấn đề liên quan