在 python 中循环遍历列表的一部分时,我无法正确索引
Posted
技术标签:
【中文标题】在 python 中循环遍历列表的一部分时,我无法正确索引【英文标题】:when looping through a slice of a list in python, I am not able to index correctly 【发布时间】:2021-04-25 21:13:29 【问题描述】::
我首先创建了一个包含从 1 到 10 的整数的列表,我的目标是通过遍历列表中的前 5 个元素将前 5 个元素乘以 10。但是,最终相乘的是第 2 到第 6 个元素。
预期结果:[10,20,30,40,50 6,7,8,9,10]
实际结果:[1,20,30,40,50 60,7,8,9,10]
我尝试以不同的方式建立索引,例如[:5]
; [0:5]
。我不知道我现在还能做什么。
这是我的代码:
lst = [1,2,3,4,5,6,7,8,9,10]
for j in lst[0:3]:
lst[j] = lst[j] * 10
print(lst)
【问题讨论】:
提示:不要change/operate
列表项while you're looping
他们...这是常见/众所周知的问题之一。
在你的问题下有一些答案,所以你可以accept一个你认为最有帮助的答案。
【参考方案1】:
您的列表切片:
lst[0:3]
扩展到列表的前三个元素 (1, 2, 3)。
即使你这样做了:
lst[0:5]
相反,要获取前 5 个元素(1、2、3、4、5),在这种情况下仍然行不通。
原因是j
会在循环的每次迭代中采用这些值。但是,列表索引从 0 开始。您可以偏移索引 (j - 1
),但这仍然不能解决您的问题。
您不想遍历列表的值——它们可以是任意数字。你不能依赖它们来迭代。相反,请使用 range
函数。它将生成一个用于迭代的数字序列。
在您的情况下,range(5)
可以解决问题。它将生成 0, 1, 2, 3, 4 -- 这将允许您正确索引列表。
这是一个工作示例:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for j in range(5):
lst[j] = lst[j] * 10
print(lst)
提供所需的输出:
[10, 20, 30, 40, 50, 6, 7, 8, 9, 10]
【讨论】:
【参考方案2】:之前的帖子提供了很好的解决方案。或者,这是模仿原始方法的一种方法:[first elem.是-10,第二:-9....最后一项是-1。倒数]
N = len(lst) # 10
for i in range(-N, -5, 1):
lst[i] *= 10
print(lst)
【讨论】:
【参考方案3】:您可以设置生成器的值,它将前 N 个元素乘以一行中的前 N 个元素:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
N = 6
lst[0:N] = (i * 10 for i in lst[0:N])
【讨论】:
以上是关于在 python 中循环遍历列表的一部分时,我无法正确索引的主要内容,如果未能解决你的问题,请参考以下文章