gpt4 book ai didi

python - del 语句不适用于列表

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:41 26 4
gpt4 key购买 nike

我有一个长列表,其中每个元素都是一个长度为 2 的列表。每个列表的第一个元素是一个字符串,每个列表的第二个元素是一个与字符串对应的整数。

我想遍历长长的“父”列表并删除整数小于三的任何“子”列表。这是我的代码。

for i in range(len(fontsizenum) / 2):
if int(fontsizenum[i][1]) < 3:
del fontsizenum[i]

但是,当我之后打印列表时它不起作用,它仍然包含数字小于 3 的值。

假设这是我正在更改的列表。

fontsizenum = [[cereal, 1], [dog, 4], [cat, 2], [water, 5]]

预期的输出是[[dog, 4], [water, 5]]

但是,我现在的实际输出仍然是原始的、未更改的列表。

最佳答案

结果列表仍然包含意外值,因为您在迭代列表时正在修改它。在几乎所有情况下,您都应该避免在迭代时修改可迭代对象。

如果您将代码更改为以下内容,结果列表应该是您所期望的。

new_lst = []
for idx, value in enumerate(lst):
if value[1] >= 3:
new_lst.append(value)

正如@AntonvBR 在评论中指出的那样,上面的代码片段可以简化为以下列表理解

[i for i in lst if i[1] > 3]

示例

如果lst设置为

[
['forbidden', 1],
['hath', 1],
['causes', 2],
['whose', 3],
]

那么结果列表将是

[['whose', 3]]

解释

我的代码片段创建了一个新列表,其中包含旧列表中的元素。值得注意的是,这使我们能够避免修改旧列表。

我更改了 if 语句中的条件以检查是否包含,而不是排除一个元素。最后,如果该检查得到满足,那么我将该值附加到新列表。

关于python - del 语句不适用于列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49266464/

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