在Python 3中,我正在编写代码以列出长度为k的单词列表,其中k是某个给定字母中的正整数。字母应该是一个列表(例如[a,b,c,d])。
代码如下:
def list_len_k_words(alphabet, k):
list = []
if k == 1:
return alphabet
if k >= 2:
for i in alphabet:
for j in list_len_k_words(alphabet,k-1):
list = list.append(i+j)
return list
这将引发错误“'NoneType'对象没有属性'append'”。我部分理解发生了什么:如果我打印程序生成的i + j的值,则最后一个值始终为None。这与代码的return语句有关,但是我看不到如何解决它。
答案 0 :(得分:2)
代码中的主要问题是您将list.append
的输出分配给list。 append
修改您的列表,但不返回任何内容(实际上,它返回None
,因为所有函数都没有明确的返回值)。在下一个循环中,您的列表为None
,因此尝试追加到列表失败。
请注意,我将您的列表重命名为'words',因为list
是Python内置函数的名称。
def list_len_k_words(alphabet, k):
words = []
if k == 1:
return alphabet
if k >= 2:
for i in alphabet:
for j in list_len_k_words(alphabet,k-1):
words.append(i+j)
return words
list_len_k_words('abc', 2)
# ['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']
您还可以使用itertools模块来获得相同的结果:
from itertools import permutations
def list_len_k_words(alphabet, k):
return [''.join(perm) for perm in permutations(alphabet, k)]