猿问

如何在for循环期间修改列表项?

如何在for循环期间修改列表项?

现在我知道在迭代循环期间修改列表是不安全的。但是,假设我有一个字符串列表,并且我希望去掉字符串本身。替换可变值是否意味着修改?



守着一只汪
浏览 754回答 3
3回答

交互式爱情

这被认为是糟糕的形式。使用列表理解,如果需要保留对列表的现有引用,则使用切片分配。a = [1, 3, 5]b = aa[:] = [x + 2 for x in a]print(b)

泛舟湖上清波郎朗

由于下面的循环只修改了已经看到的元素,因此可接受: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

慕尼黑5688855

在我看来,还有一个for循环变体比一个枚举()更干净:for idx in range(len(list)):     list[idx]=... # set a new value     # some other code which doesn't let you use a list comprehension
随时随地看视频慕课网APP

相关分类

Python
我要回答