【问题标题】:Python - How to check if the next value in a list is the same as the previous?Python - 如何检查列表中的下一个值是否与上一个相同?
【发布时间】:2020-11-15 14:01:48
【问题描述】:

假设我们有这个数组:

arr2 = [2, 3, 1, 2, 2]

我尝试了以下方法:

for i,x in enumerate(arr2):
 
    if x == 2 and x[i+1] == 2:
 
        print('TwosPair')

但收到以下错误:

TypeError: 'int' object is not subscriptable

难道我不能使用枚举检查上一个索引/下一个索引吗?

我还尝试了以下方法:

for i,x in enumerate(arr2):

    if x == 2 and x[arr2.index(i)+1] == 2:
 
        print('TwosPair')

但是现在出现这个错误:

ValueError: 0 不在列表中

它在说什么0?

【问题讨论】:

  • 在您的示例中,x 是一个数字,您无法在其上查找索引。这毫无意义:x[i+1].

标签: python python-3.x list next


【解决方案1】:

这能满足你的需要吗?

arr2 = [2, 3, 1, 2, 2]

for i,x in enumerate(arr2):
    if i < len(arr2)-1 and arr2[i+1] == x:
        print('TwosPair')

【讨论】:

    【解决方案2】:

    这接受任何可迭代的, 包括生成器和容器,例如列表, 并报告两个相邻元素是否相等。

    from typing import Iterable
    
    
    def has_adjacent_dup(a: Iterable):
        sentinel = object()  # might use None if None won't appear in input
        prev = sentinel
        for i in a:
            if prev == i:
                return True
            prev = i
        return False
    
    
    if has_adjacent_dup(arr2):
        print('Pair')
    

    【讨论】:

      【解决方案3】:

      你可以使用zip():

      arr2 = [2, 3, 1, 2, 2]
      
      for x,y in zip(arr2,arr2[1:]):
          if x == y == 2:
              print('TwosPair')
      

      输出:

      TwosPair
      

      【讨论】:

      • @MarkMeyer 哦,现在我意识到了。
      • 是的,zip 是我要找的,谢谢!但是我也有同样的问题,为什么要加[None]?
      • @ПетърХристов 好吧,arr2 = [2, 3, 1, 2, 2] 和 arr2[1:] = [3, 1, 2, 2],所以arr2[1:]+[None] = [3, 1, 2, 2, None] 来填补空白。
      【解决方案4】:

      你有点不清楚,但是如果你想检查前一个索引是否与下一个索引相对值相同。 Zip 将允许您遍历两个列表,第一个是原始列表,第二个被切片为一个元素,因为它的第一个项目是原始列表前面的一个索引,允许访问原始列表的当前和下一个索引

          def TwosPair(list_1):
              for curr, next in zip(list_1, list_1[1:]): 
                  if curr == 2 and next == 2: print('TwosPair')
      
      
          
      

      【讨论】:

        【解决方案5】:

        要回答您的具体问题,它所说的 0 是我在枚举生成器的第一次迭代中获取的 0 值,然后当它尝试通过 arr2.index(i) 在数组中找到 i 时,它会引发错误

        【讨论】:

          【解决方案6】:

          我相信你的方法基本上是合理的——我们只需要稍微调整一下。首先,我们将使用enumerate() 的第二个参数使其生成的值成为下一个索引。其次,我们将数组循环限制为除最后一项之外的所有内容,这样我们就不会溢出数组索引。最后,我们将使用一些有趣的 Python 语法来简化测试:

          array = [2, 3, 1, 2, 2]
          
          for next_index, element in enumerate(array[:-1], 1):
          
              if element == 2 == array[next_index]:
          
                  print('TwosPair')
          

          【讨论】:

            【解决方案7】:

            在 Python 中此要求的一个有效实现是使用itertools.groupby。

            from itertools import groupby
            
            for k, g in groupby(arr):
                if k == 2:
                   next(g)
                   for _ in g:
                       print("TwosPair")
            

            【讨论】:

              【解决方案8】:
              arr2 = [2, 3, 3, 1, 2, 2, 9, 4, 4]
              
              for i in range(len(arr2)-1):
                  if arr2[i] == arr2[i+1]:
                      print('Same next & current values!')
              

              当它们具有相同的值时,您可以使用它来查找当前值和下一个值。

              【讨论】:

                猜你喜欢
                • 2021-10-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-29
                • 1970-01-01
                • 2020-08-20
                • 2015-06-20
                • 1970-01-01
                相关资源
                最近更新 更多