要了解这里发生了什么,请比较一个类似示例中发生的情况,我想将任何大于 20 的数字设置为 -1:
numbers = [1, 10, 30, 40, 50]
for number in numbers:
if number > 20:
number = -1
print(numbers) # same as before!
为什么不将最后三个数字设置为 -1?因为number 这里是一个值——它在内存中的位置与numbers 数组的内容完全无关。您的示例中的word 完全相同。
在您的循环中,word 绑定到一块新内存,其内容恰好与words 数组的当前条目相同。在您的第一个 sn-p 中定义 word 时,您已经失去了任何方法来操作它来自的数组位置。通过像在第二个 sn-p 中那样遍历索引,您可以在数组中保留一个后门。
这两个参考,
可能有助于理解以下棘手的问题:如果我们有一个列表列表而不是字符串列表,会发生什么?
listOfLists = [[1], [2, 3], [9, 10, 11], [40, 50, 60, 70]]
for l in listOfLists:
if len(l) >= 3:
l[:] = l[::-1] # note that `[:]`!!!
print(listOfLists)
这实际上将反转具有超过 2 个元素的任何子列表。你能明白为什么吗?如果是这样,请收下这颗金星:?!