在python中使用join方法-混淆错误

时间:2019-05-21 13:44:55

标签: python-3.x

我有一个非常困惑的问题。

此代码打印出单词“ caker”的长度3和4的所有组合

from itertools import chain, permutations 

word = input("Please enter the letters or words to scramble: ")
perm_words = chain.from_iterable(permutations(word, i) for i in range(3,len(word)))

for item in perm_words:
    print(item)

在下面的代码中(在最后的for循环中使用.join()方法),我只得到3个字母的单词。为什么?

from itertools import chain, permutations 

word = input("Please enter the letters or words to scramble: ")
perm_words = chain.from_iterable(permutations(word, i) for i in range(3,len(word)))

for item in perm_words:
    word = "".join(item).lower()
    print(word)

代码完全相同

2 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为chain_iteratorpermutations中的惰性求值,因为您在多个地方使用了相同的变量名word。不要覆盖word,此问题已解决。

from itertools import chain, permutations

your_word = 'caker'
perm_words = chain.from_iterable(permutations(your_word, i) for i in range(3, len(your_word)))

for item in perm_words:
    word = "".join(item).lower()
    print(item)
    print(word)

输出:

...
('r', 'k', 'e', 'c')
rkec
('r', 'k', 'e', 'a')
rkea
('r', 'e', 'c', 'a')
reca
('r', 'e', 'c', 'k')
reck
('r', 'e', 'a', 'c')
reac
('r', 'e', 'a', 'k')
reak
('r', 'e', 'k', 'c')
rekc
('r', 'e', 'k', 'a')
reka

答案 1 :(得分:1)

我不确定为什么会发生这种情况,但问题是您正在将值分配给word。

from itertools import chain, permutations 

word = input("Please enter the letters or words to scramble: ")
perm_words = chain.from_iterable(permutations(word, i) for i in range(3,len(word)))

for item in perm_words:
    other_word = "".join(item).lower()
    print(other_word)