问题:
通常不建议在 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中文网其他相关文章!