理解“列表中的项目”PYTHON

2024-05-20 00:54:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我看过很多次下面的代码,我知道这是解决我问题的方法,但我真的很难理解它是如何工作的。特别是该准则:

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是如何符合方程的,而不是“因为”(这只是一个没有帮助的答案),它代表什么。

有人能帮我解决这个问题吗,或者能把这个方程展开成几个方程,也许能帮我理解它的工作原理。当我了解这些工具的工作原理时,使用它们对我来说容易得多,而这些工具让我困惑了一段时间。

提前谢谢。


Tags: 工具方法代码in列表forifnot
3条回答

如果你把它分成三部分可能会更清楚:

  1. item
  2. 来自for item in list
  3. 其中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中所有偶数的平方。

首先,您所指的代码行称为列表理解。基本上,正如你所知道的,这是一种创建一个“正在进行”的项目列表的方法,同时还可以创建条件语句。

当您创建一个列表理解时,您正在构建一个列表,您需要告诉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

列表理解[item for item in list_a if item not in list_b]相当于使用filter函数:

filter(list_a, lambda item: item not in list_b)

相关问题 更多 >