代码的目的是收集wordlist中的所有字符,我做了以下操作:
wordlist = ['cat','dog','rabbit']
[c for c in word for word in wordlist]
输出很奇怪:
['r',
'r',
'r',
'a',
'a',
'a',
'b',
'b',
'b',
'b',
'b',
'b',
'i',
'i',
'i',
't',
't',
't']
我知道我可以使用:
[ch for ch in "".join(wordlist)]
或
[word[i] for word in wordlist for i in range(len(word))]
不过我的第一个方案好像也对,谁能告诉我为什么第一个方案不行?
问题在于理解中 for
语句的顺序,它们必须交换:
In [10]: [c for word in wordlist for c in word]
Out[10]: ['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']
请注意,它对您有效并且没有因“word
is not defined”错误而失败的原因是您将 word
变量定义为 rabbit
在范围内:
In [3]: [c for c in word for word in wordlist]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-decfecd23a92> in <module>()
----> 1 [c for c in word for word in wordlist]
NameError: name 'word' is not defined
In [4]: word = 'rabbit'
In [5]: [c for c in word for word in wordlist]
Out[5]:
['r',
'r',
'r',
'a',
'a',
'a',
'b',
'b',
'b',
'b',
'b',
'b',
'i',
'i',
'i',
't',
't',
't']