【问题标题】: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