复杂Python列表理解
有人能解释一下列表理解到底是如何工作的吗复杂Python列表理解,python,python-2.7,list-comprehension,Python,Python 2.7,List Comprehension,有人能解释一下列表理解到底是如何工作的吗 page = 'one two one three\n' * 10 unique_words = list(word for line in page for word in line.split()) print unique_words 输出 ['o', 'n', 'e', 't', 'w', 'o', 'o', 'n', 'e', 't', 'h', 'r', 'e', 'e', 'o', 'n', 'e', 't', 'w', 'o', 'o
page = 'one two one three\n' * 10
unique_words = list(word for line in page for word in line.split())
print unique_words
输出
['o', 'n', 'e', 't', 'w', 'o', 'o', 'n', 'e', 't', 'h', 'r', 'e', 'e', 'o', 'n', 'e', 't', 'w', 'o', 'o', 'n', 'e', 't', 'h', 'r', 'e', 'e', 'o', 'n', 'e', 't', 'w', 'o', 'o', 'n', 'e', 't', 'h', 'r', 'e', 'e']
我对变量在哪里声明和在哪里使用感到困惑?
e、 g.最初我们只知道页面是一个字符串
页面中的行应返回字符串中的每个字符
word in line.split()
->正在删除'\n'和空白,并返回每个字符
这就是输出。但是我仍然不明白如何编写它,以便编译器理解我想要的东西
问题:编译器一步一步地处理逐行逐页的逐行的.split()
?您需要看到的双循环是嵌套的,从左到右:
for line in page:
for word in line.split():
word
[word for line in page for word in line.split()]
您有一个长字符串进入,因此for line in page
在每个字符上循环<代码>行
是一次一个字符。拆分该字符将为您提供一个仅包含该字符的列表,除非该字符是空白(空格、换行符、制表符等):
因此,最终结果是一个包含单个字符的列表
请注意,从技术上讲,您有一个生成器表达式提供list()
调用;但是,输出与列表相同。如果将list(…)
替换为[…]
,则可以理解列表
如果您想要唯一的单词,请使用set()
,只需一个简单的str.split()
调用,无需循环:
unique_words = set(page.split())
str.split()<代码>设置()
删除任何重复项:
>>> set(page.split())
{'two', 'one', 'three'}
你从左到右读:
for line in page:
for word in line.split():
word
[word for line in page for word in line.split()]
同:
mylist=[]
for line in page:
for word in line.split():
mylist.append(word)
对于页面中的行
不会执行您认为的操作(提示:打印行
)。听起来您好像知道Python对您的代码做了什么。你为什么问编译器的细节?那些对你没有帮助。看起来你真正需要的信息是如何逐行检查字符串。非常感谢@Martijn。这正是我想要的(您显示为嵌套for循环的排列)。实际上,它最初只是一套。我将其更改为list,以理解完整的输出。再次感谢您的时间和帮助。感谢@mbatchkarov为您抽出时间。我现在明白了。