我已经多次看过以下代码了,我知道这是我的问题的解决方案,但我真的很难理解它是如何工作的。代码特别是:
item for item in list_a if item not in list_b.
例如,使用for each in list
,我可以理解它是通过列表,并为该列表中的每个项目执行循环。使用while x < 10
很容易理解,大多数其他循环和类似命令都非常简单。即使是for item in list_a if item not in list_b
对我来说也是有道理的,尽管如果没有那个item
,这似乎没有用......但由于某种原因,我只是不明白第一个item
除了“因为”(这不是一个有用的答案),它代表的是什么。
有人能够帮助我解决这个问题,或者能够将这个等式扩展到几个方程式中,这可能有助于我了解它的工作方式。当我理解它们是如何工作的时候,我会更容易使用这些工具,而这些工具让我困惑了一段时间。
提前致谢。
答案 0 :(得分:3)
如果将它分成三部分可能会更清楚:
item
; for item in list
; item not in list_b
。列表理解语法之所以如此,首先是因为它反映了扩展版本:
for item in list: # 2.
if item not in list_b: # 3.
new_list.append(item) # 1.
并且因为您不一定只想要item
,例如:
new = [x ** 2 for x in old if not x % 2]
将在new
中创建一个old
列表,其中包含所有偶数的平方。
答案 1 :(得分:0)
列表推导[item for item in list_a if item not in list_b]
等同于使用filter
函数:
filter(list_a, lambda item: item not in list_b)
答案 2 :(得分:0)
首先,您所指的代码行称为列表推导。基本上,正如您所知,它是一种“随时随地”创建项目列表的方法,同时具备条件的能力。
当您创建列表推导时,您正在构建一个列表,并且您需要告诉Python您在该列表中添加了什么。如果列表理解只是:
new = [for item in list_a if item not in list_b]
它根本不是列表理解,因为你只是迭代而不是在新列表中存储任何东西。因此,为了将项目实际保存到新列表中,您需要:
new = [item for item in list_a if item not in list_b]
# for each item in 'list_a', if 'item' is not in
# 'list_b', add item to 'new'
与以下内容相同:
i = 0
for item in list_a:
if item not in list_b:
new[i++] = item
将“首先item
”视为您放入列表的值。本质上,列表理解枚举,跟踪索引并为每次迭代执行类似的操作:
new[index] = item
答案 3 :(得分:-1)
您正在通过循环(并过滤)另一个列表来构建列表
第一项是你要放入结果列表的东西
您还可以对元素执行操作,例如
[i*2 for i in range(6)]
输出将是:
[0, 2, 4, 6, 8, 10]
基本上是第一个&#34;项目&#34;允许您控制您在结果列表中添加的内容