【问题标题】:How to find if there are 2 elements of same value consecutively in a list?如何查找列表中是否连续有2个相同值的元素?
【发布时间】:2020-11-20 09:29:38
【问题描述】:

例如, [1,3,3,5] 应该返回 True[1,3,1,3] 应该返回 False

我正在寻找一个使用循环的简单解决方案。

我尝试了以下方法:

def conseq(nums):
    for i in range (len(nums)):
        if nums[i]==nums[i+1]:
            return True
            break
        else:
            return False

【问题讨论】:

标签: python list loops python-3.7


【解决方案1】:

当您的函数第一次遇到 2 个不同的连续数字时,它会返回 False。从函数返回会立即结束该函数,之后该函数不会继续。这也是为什么不需要break 的原因。

您的代码的另一个问题是,一旦达到最终数字,nums[i + 1] 将访问数组边界之外。这就是为什么你应该迭代 len(nums) - 1 而不是 len(nums) - 没有理由检查最终数字,因为它后面没有任何内容。

def conseq(nums):
    for i in range(len(nums) - 1):
        if nums[i]==nums[i+1]:
            return True

    # Only return False once we've exhausted all numbers.
    # Since we didn't return True so far - it means there are
    # no consecutive equal numbers, so we can safely return False
    return False

【讨论】:

    【解决方案2】:

    return 结束函数,所以这里它也会停止处理 你的真实陈述大多有效,休息是不必要的

    直到 for 循环结束后才需要 else 语句(仅当其他所有内容都已解析时才返回 False)

    同样你通过代码解析的方式,当你在最后的 nums 时,nums 不能访问 nums[i+1] 所以你需要范围 len(nums) - 1

    如果你想放一个什么都不做的 else,你可以用一个分号或 pass 我相信,但 else 在这里是不必要的

    def conseq(nums):
        for i in range (len(nums)-1):
    
            if nums[i]==nums[i+1]:
                return True
            else:
                ;
        return False
    

    【讨论】:

      【解决方案3】:

      在循环完成之前,您不能返回False(因为匹配项可能在您尚未检查的列表中)。并且return 之后的break 永远不会发生(因为return 结束了函数及其中的所有内容)。

      【讨论】:

        【解决方案4】:

        枚举没有最后一个的列表(以避免尝试捕获i+1 超出范围)然后将每个项目与下一个项目和return True 进行比较,如果它们相同。在循环 return False 之后,因为没有一个是相似的(返回中断函数)

        def function(number_list):
            for i, item in enumerate(number_list[:-1]):
                if item == number_list[i+1]:
                    return True
            return False
        

        【讨论】:

          【解决方案5】:
          def conseq(nums):
              for i in range (len(nums)):
                  if nums[i]==nums[i-1]:
                      return True    
              return False
          
          
          

          【讨论】:

            【解决方案6】:

            我修改了您的代码。请检查并告知是否有用

            def conseq(nums):
                flag=True
                for i in range (len(nums)-1):
                    if nums[i]==nums[i+1]:
                        print(True)
                        flag=False
                        break
                    else:
                        continue
                if(flag):
                    print(False)
            nums=[1,3,3,5]
            nums1=[1,3,1,3]
            conseq(nums)
            conseq(nums1)
            

            【讨论】:

              【解决方案7】:

              我们已经有很多解决方案。我已经尝试使用numpy 没有循环:

              >>> import numpy as np
              >>> f = np.array([1,3,3,5])
              >>> (np.where(np.diff(f) == 0)[0]).astype('bool')[0] #check if we have any difference of two elements 0?
              True
              

              【讨论】:

                猜你喜欢
                • 2013-11-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-12-11
                • 2018-10-27
                • 1970-01-01
                • 1970-01-01
                • 2012-08-22
                相关资源
                最近更新 更多