首页 >后端开发 >Python教程 >如何在 Python 迭代过程中安全地修改列表中的字符串?

如何在 Python 迭代过程中安全地修改列表中的字符串?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-20 14:46:23160浏览

How Can I Safely Modify Strings Within a List During Iteration in Python?

安全地迭代和修改列表

问题:

通常不建议在 Python for 循环期间修改列表。但是,如果您需要修改列表中的字符串该怎么办?替换这些可变值算作禁止修改吗?

答案:

只要修改了列表中已经迭代过的元素,就被视为禁止修改可以接受。例如:

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

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

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

此代码迭代列表 a 并从每个字符串中去除空格。它不需要创建新列表并将其分配给原始列表。

但是,在迭代期间更改列表中的项目数量是有风险的。例如:

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 中删除具有前导或尾随空格的元素。不幸的是,它失败了,因为删除元素会破坏后续迭代的索引。

注意:

需要注意的是,虽然您可以按照描述安全地修改列表中的元素,任何增加或减少元素数量的尝试都可能导致错误

就地删除:

如果您想在迭代期间有效删除条目,请使用列表理解:

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

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

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

此代码创建一个仅包含没有前导或尾随空格的条目的新列表,有效地“就地”删除不需要的元素。

以上是如何在 Python 迭代过程中安全地修改列表中的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn