我在Python中学习列表推导。我是要从一个单词列表中添加字母并形成一个新列表,但没有重复。 这就是我正在尝试的:
wordlist = ['cat','dog','rabbit']
letterlist = [aletter for aword in wordlist for aletter in aword if aletter not in letterlist]
print letterlist
我收到以下错误:
Traceback (most recent call last):
File "training.py", line 5, in <module>
letterlist = [aletter for aword in wordlist for aletter in aword if aletter not in letterlist]
NameError: name 'letterlist' is not defined
我做错了什么?
答案 0 :(得分:4)
letterlist
。因此,您无法在其内部引用它。函数只能引用自身,因为函数在被定义之后才被调用,但是列表理解作为定义的一部分被执行,因此它不能引用自身。一种可能的方法是在没有测试的情况下定义列表,然后删除重复项:
letterlist = list(set(["".join(wordlist)])) # Modified from idjaw's answer
使用set()
使其成为一个列表(删除重复项),并使用list
将其转换回列表。
如果你真的不想使用set
,那么使用列表理解可能不是最好的方法。您可以像这样使用for
循环:
letterlist = []
for char in "".join(wordlist):
if char not in letterlist:
letterlist.append(char)
答案 1 :(得分:0)
如果您只是想摆脱重复,可能需要使用set()
。
x = [1,1,14,4,47,7,7,14,47]
list(set(x))
答案 2 :(得分:0)
在这种特殊情况下,列表理解可能不是要采取的路线。 只需取出for循环并将它们放在外面并随时将元素附加到列表中,这样当您检查列表时,它确实存在。 无论如何,您使用的算法的复杂性将非常可怕:/
答案 3 :(得分:0)