【问题标题】:How to go through a python list one by one?如何一一浏览python列表?
【发布时间】:2021-11-04 20:53:34
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是的,很有可能,你说的如何让它显示3是什么意思?你想在哪里显示它?为什么?逻辑是什么?

标签: python list-comprehension


【解决方案1】:

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 或更新版本时,否则您可以查看上面链接中的大致等效以创建相同的功能):

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)

【讨论】:

    【解决方案2】:

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

    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")
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用“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
      

      【讨论】:

        【解决方案4】:

        当你想打印 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)
        

        【讨论】:

          【解决方案5】:

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

          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)

          【讨论】:

          • 顺便说一句,OP明确表示他们需要检查下一项是否符合条件
          • 我个人认为这种方法对于找到缺失值的目标来说不太优雅。当然,一旦条件发生变化,我的解决方案将不起作用
          • 你对这个问题做了太多假设。例如,相邻元素只能相差 1 或 2。尝试使用 my_list = [0,1,2,4,5,8,19] 运行您的代码
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-05
          • 2016-09-10
          • 1970-01-01
          • 2014-11-15
          • 1970-01-01
          • 2021-10-10
          相关资源
          最近更新 更多