当我在列表中列出整数时,在末尾会添加一个额外的整数[Python]


numberlist = [1, 4, 7, 5, 6, 2, 4]
for i in numberlist:
pos = numberlist.index(i)
next = pos + 1
ordering = [i, numberlist[next]]
print(ordering)

这是我遇到问题的代码。当我运行它时,它应该打印多个包含2项的列表:I的值和它后面的数字。它确实这样做了,但是在最后一次迭代中添加了一个额外的数字,并且它可能是什么数字没有一致性,在这种情况下输出是:

[1, 4]
[4, 7]
[7, 5]
[5, 6]
[6, 2]
[2, 4]
[4, 7]

在末尾添加了一个7,虽然我认为它可能只是列表中已经存在的数字的重复,但如果我向列表添加另一个值,

numberlist = [1, 4, 7, 5, 6, 2, 4, 6]

输出变成:

[1, 4]
[4, 7]
[7, 5]
[5, 6]
[6, 2]
[2, 4]
[4, 7]
[6, 2]

添加了A 2,但2一开始就不存在于列表中,并且我还注意到6没有被考虑在内,它再次打印7。然而,如果我添加的不是6,而是3,代码就会给我一个错误,因为它应该。

File "c:/Users/santi/Desktop/code/order/#test zone.py", line 8, in <module>
ordering = [i, numberlist[next]]
IndexError: list index out of range

这是怎么回事?

numberlist = [1, 4, 7, 5, 6, 2, 4]

根据你的例子和你的for循环,列表中有7个元素。

一旦i为6,即列表中的最后一个位置,它仍将执行for循环中的所有代码。我的建议是,当到达列表中的最后一个元素时,使用if条件来中断for循环。

numberlist = [1, 4, 7, 5, 6, 2, 4]
for position, number in enumerate(numberlist):
# Break for loop once it is the last position
# Need to -1 from len() function as index position is from 0 to 6
if position == len(numberlist) - 1:
break
# proceed to next position with += 1
position += 1
ordering = [number, numberlist[position]]
print(ordering)

这段代码很有趣,因为它暴露了初学者可能遇到的一些问题。第一个是选择更有意义的变量名(见注释),第二个是学习如何调试小程序。

之前的评论和帖子确实没有解决这些问题,尽管他们确实指出了症状。

更有意义的变量名修改OP代码,以演示意图并避免陷阱:

如果L列表不包含重复的数字(本例中为4),问题NOT能够浮出水面

L = [1, 4, 7, 5, 6, 2, 4]
#       *              *   
for x in L:                          # use x to mean the extracted number.  i is for index usually

next_pos = L.index(x) + 1

pair = [x, L[next_pos] ] # take current one and next num.

print(pair)              # when it reached the end of L, 4 in the case, it will find the first 4 (pos. 1) and that's why you have pair (4, 7)

打印相邻数字的正确方法是:

L = [1, 4, 7, 5, 6, 2, 4]
for a, b in zip(L, L[1:]):
print(a, b)

相关内容

  • 没有找到相关文章

最新更新