gpt4 book ai didi

python - 如何在 for 循环期间修改列表条目?

转载 作者:IT老高 更新时间:2023-10-28 12:30:43 29 4
gpt4 key购买 nike

现在我知道在迭代循环期间修改列表是不安全的。但是,假设我有一个字符串列表,并且我想自己剥离字符串。替换可变值算作修改吗?


Scope of python variable in for loop对于一个相关的问题:分配给 迭代变量 不会修改底层序列,也不会影响 future 的迭代。

最佳答案

由于下面的循环只修改了已经看到的元素,它被认为是可以接受的:

a = ['a',' b', 'c ', ' d ']

for i, s in enumerate(a):
a[i] = s.strip()

print(a) # -> ['a', 'b', 'c', 'd']

不同于:

a[:] = [s.strip() for s in a]

因为它不需要创建临时列表并分配它来替换原始列表,尽管它确实需要更多的索引操作。

警告:虽然您可以通过这种方式修改条目,但您不能在不冒险的情况下更改list中的项目数遇到问题。

这是我的意思的一个例子——删除一个条目会从那时起破坏索引:

b = ['a', ' b', 'c ', ' d ']

for i, s in enumerate(b):
if s.strip() != b[i]: # leading or trailing whitespace?
del b[i]

print(b) # -> ['a', 'c '] # WRONG!

(结果是错误的,因为它没有删除它应该有的所有项目。)

更新

由于这是一个相当流行的答案,以下是如何有效地“就地”删除条目(即使这不是问题所在):

b = ['a',' b', 'c ', ' d ']

b[:] = [entry for entry in b if entry.strip() == entry]

print(b) # -> ['a'] # CORRECT

How to remove items from a list while iterating? .

关于python - 如何在 for 循环期间修改列表条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4081217/

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