如何逐一浏览 python 列表?

How to go through a python list one by one?

我正在尝试制作一种算法,找出一组数字中哪个数字乱序。

有没有办法遍历列表,看看列表中的每一项都加 1 是否会产生列表中下一项的值。示例 ( 0 + 1 == 1) 和 ( 1 + 1 = 2) 但是当你到达 (2 + 1 != 4) 我如何让它显示 3.

number = [0,1,2,4,5]

if number[0] + 1 != number[1]:

当你想打印 3 时,我不能说我理解逻辑是什么。但无论如何,这里是如何做的,相应地使用代码:

a = [0,1,2,4,5]

for i in range(len(a)-1):
   if a[i] + 1 != a[i+1]:
      print(a[i]+1)

或者,如果您希望将缺失的字段添加到列表中,您可以通过以下方式进行:

for i in range(a[0], a[-1]):
    if a[i] + 1 != a[i+1]:
       a.insert(a[i]+1,a[i]+1)

我个人更喜欢这种方法: 而不是检查下一个值是否比当前值大一个, 遍历列表中从最低到最高的每个数字并检查它是否存在。

my_list = [0,1,2,4,5,8,9]

for i in range(min(my_list), max(my_list) + 1):
    if i not in my_list:
        print(i)

这仅适用于每个值都比前一个大一个的条件,或者如果值之间的间隔保持不变,在这种情况下,间隔需要包含在范围函数中,如下所示:
range(start, stop, step)

您可以尝试使用“for 循环”遍历每个数字:

numbers = [0,1,2,4,5] #your numbers

for i in range(0, len(numbers)): #go through every number
    if numbers[i] + 1 != number[i+1]: #check if number is not in the line
        print(str(i)+"is false") #output

IIUC:我建议使用内置的 zip 函数和从第二项开始的列表副本来获取列表中的当前项和下一项:

numbers = [0, 1, 2, 4, 5]

for c_number, n_number in zip(numbers, numbers[1:]):
    if c_number + 1 != n_number:
        print(c_number + 1)

或更好地使用 itertools.pairwise(仅当您拥有 Python 3.10 或更新版本时,否则您可以查看 大致等效的 上面的 link 创建相同的功能):

import itertools

numbers = [0, 1, 2, 4, 5]

for c_number, n_number in itertools.pairwise(numbers):
    if c_number + 1 != n_number:
        print(c_number + 1)

您可以比较每个数字及其相对位置(从第一个值开始):

if any(i!=n for i,n in enumerate(a,a[0])):
   print("out of order")
else:
   print("proper sequence")

您还可以使用 zip 将每个项目与其后续项目进行比较:

if any(m-n != 1 for n,m in zip(a,a[1:])):
   print("out of order")
else:
   print("proper sequence")