繁体   English   中英

理解“list_a 中项目的项目,如果......”PYTHON

[英]understanding "item for item in list_a if ..." 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_bfor item in list_a if item not in list_b对我来说也很有意义,尽管如果没有第一个item ,仅此一项似乎就不起作用......但出于某种原因,我只是不明白第一个item如何适合等式,除了“因为”(这不是一个有用的答案),它代表什么。

有人能帮我解决这个问题,或者能把这个方程扩展成几个可能帮助我理解它是如何工作的方程。 当我了解这些工具的工作原理时,使用这些工具就容易多了,而这让我困惑了一段时间。

提前致谢。

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

  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中所有偶数的平方。

您正在通过循环(和过滤)另一个列表来构建列表

第一项是您要放入结果列表的内容

你也可以对元素做一些事情,比如

[i*2 for i in range(6)]

输出将是:

 [0, 2, 4, 6, 8, 10]

本质上,第一个“项目”可让您控制放入结果列表的内容

列表[item for item in list_a if item not in list_b]等价于使用filter函数:

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

首先,您所指的代码行称为列表理解。 基本上,如您所知,它是一种“随时随地”创建项目列表的方法,并且还具有条件语句的能力。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM