gpt4 book ai didi

python - 关于python列表元素和列表推导的一些问题

转载 作者:行者123 更新时间:2023-11-28 20:28:24 24 4
gpt4 key购买 nike

开门见山。一个列表,例如lst = [1, 1, 1, 0, 0, 0],现在我想把 1 变成 0,因为 lst = [0, 0, 0, 0, 0, 0]

我原来的解决方案如下:

for item in lst:

if item == 1:

item = 0

其实结果列表还是lst = [1, 1, 1, 0, 0, 0]。

Q1:除了使用列表推导式外,还有其他解决方案吗?

Q2:当里面有很多if else for时,如何写出正确的list comprehension?所以我尝试了以下四种风格:

No.1 lst = [0 if item == 1 for item in lst] # Returns syntax error

No.2 lst = [0 for item in lst if item == 1] # Returns [0, 0, 0]

No.3 lst = [0 if item == 1 else item for item in lst] # Returns [0, 0, 0, 0, 0, 0]

No.4 lst = [0 for item in lst if item == 1 else item] # Returns syntax error

最佳答案

列表理解和 for item in iterable 都不会改变列表。在前一种情况下,这在设计上(实际上)是不可能的,在后一种情况下,这是因为 Python 仅按值传递。

您可以使用 for 循环并更改特定索引处的值。只是不要在迭代时删除或添加任何东西。 enumerate 允许您吃蛋糕(项目)并吃它(必须索引)。

for i, item in enumerate(lst):
if item == 1:
list[i] = 0

一般来说,列表理解的形式是[expression for target in expression if condition]。末尾的可选过滤部分只能跳过一个项目(将其视为 if not condition: continue),选择要放入正在生成的列表中的项目发生在第一个 expression - 几个版本之前,添加了条件表达式(expression if condition else expression),因此您可以在该表达式中进行一些基本选择。不过,在一个表达式中执行两次或更多次确实会插入它,因此请避免使用更复杂的逻辑。

关于python - 关于python列表元素和列表推导的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5475384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com