在 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 中循环遍历列表的一部分时,我无法正确索引的主要内容,如果未能解决你的问题,请参考以下文章

问题在for循环中删除列表项(python)[重复]

为啥 Python for 循环在遍历列表副本并进行删除时会跳过元素? [复制]

Python 3.5 遍历字典列表

使用 For Each 循环遍历列表时删除列表中的项目

python列表的遍历与循环

python中for循环的用法