Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂Python列表理解_Python_Python 2.7_List Comprehension - Fatal编程技术网

复杂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为您抽出时间。我现在明白了。