如何查找列表中是否连续有2个相同值的元素?
How to find if there are 2 elements of same value consecutively in a list?
例如,
[1,3,3,5]
应该 return True
而 [1,3,1,3]
应该 return False
.
我正在寻找使用循环的简单解决方案。
我尝试了以下方法:
def conseq(nums):
for i in range (len(nums)):
if nums[i]==nums[i+1]:
return True
break
else:
return False
在循环完成之前,您不能 return False
(因为匹配项可能在您尚未检查的列表部分)。 return
之后的 break
将永远不会发生(因为 return
结束函数及其中的所有内容)。
return结束函数,所以这里也会停止处理
你的 true 语句大部分有效,break 是不必要的
在 for 循环结束之前您不需要 else 语句(它 return 仅当其他所有内容都已被解析时才为 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
您的函数第一次遇到 2 个不同的连续数字时,它 returns 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
枚举没有最后一个的列表(以避免 i+1
的 try catch 超出范围)然后将每个项目与下一个项目进行比较,如果它们相同则 return True
。在循环 return False
之后因为 none 是相似的(returns 中断函数)
def function(number_list):
for i, item in enumerate(number_list[:-1]):
if item == number_list[i+1]:
return True
return False
def conseq(nums):
for i in range (len(nums)):
if nums[i]==nums[i-1]:
return True
return False
我修改了你的代码。请查看并告知是否有用
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)
我们这里已经有很多解决方案了。我试过使用 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
例如,
[1,3,3,5]
应该 return True
而 [1,3,1,3]
应该 return False
.
我正在寻找使用循环的简单解决方案。
我尝试了以下方法:
def conseq(nums):
for i in range (len(nums)):
if nums[i]==nums[i+1]:
return True
break
else:
return False
在循环完成之前,您不能 return False
(因为匹配项可能在您尚未检查的列表部分)。 return
之后的 break
将永远不会发生(因为 return
结束函数及其中的所有内容)。
return结束函数,所以这里也会停止处理 你的 true 语句大部分有效,break 是不必要的
在 for 循环结束之前您不需要 else 语句(它 return 仅当其他所有内容都已被解析时才为 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
您的函数第一次遇到 2 个不同的连续数字时,它 returns 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
枚举没有最后一个的列表(以避免 i+1
的 try catch 超出范围)然后将每个项目与下一个项目进行比较,如果它们相同则 return True
。在循环 return False
之后因为 none 是相似的(returns 中断函数)
def function(number_list):
for i, item in enumerate(number_list[:-1]):
if item == number_list[i+1]:
return True
return False
def conseq(nums):
for i in range (len(nums)):
if nums[i]==nums[i-1]:
return True
return False
我修改了你的代码。请查看并告知是否有用
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)
我们这里已经有很多解决方案了。我试过使用 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