如何检查列表中的所有整数是否连续?
How to check all the integers in the list are continuous?
我正在尝试编写一个程序,如果 list
中的所有数字都是连续的,它将打印 "YES",如果数字不连续,则应该 return "NO"连续的。连续的意思是列表中的每个数字都应该大于前一个元素中的一个。
例如:
它应该为输入打印 "YES":[3, 4, 5]
、[7, 8, 9]
、[1, 2, 3]
、[0, 1, 2, 3, 4, 5]
.. 等等
它应该为输入打印 "NO":[9, 1, 0]
、[3, 2, 4]
、[5, 5]
、[9, 8, 2, 3, 7]
.. 等等
我为此使用了 enumerate
。
这是我的代码:
inp=[1,2,3,4,5]
flag=0
for index,e in enumerate(inp):
if index!=len(inp)-1:
if inp[index+1]==inp[index]+1:
flag=1
if flag==1:
print ("YES")
else:
print ("NO")
代码工作正常,但我发现它是多余的。
有没有更好的方法来使用枚举或不使用枚举?
您不需要 enumerate
来检查列表的元素是否连续。您可以通过使用 zip
and all
创建一个函数来简单地实现它:
def check_continuity(my_list):
return all(a+1==b for a, b in zip(my_list, my_list[1:]))
同样的结果可以通过 any
with zip
as (similar to all
实现,但与 not
和 !=
进行比较):
def check_continuity(my_list):
return not any(a+1!=b for a, b in zip(my_list, my_list[1:]))
以上函数将 return True
/False
取决于您的列表是否连续。
样本运行:
# Continuous Lists
>>> check_continuity([3, 4, 5])
True
>>> check_continuity([7, 8, 9])
True
>>> check_continuity([1, 2, 3])
True
# Non Continuous Lists
>>> check_continuity([9, 1, 0])
False
>>> check_continuity([3, 2, 4])
False
>>> check_continuity([5, 5])
False
为了打印 "YES"/"NO",您可以在函数调用之外做一个简单的 if..else
检查:
>>> "YES" if check_continuity([1, 2, 3]) else "NO"
'YES'
# OR update the return statement in your function to
# return "NO" if any(a+1!=b for a, b in zip(my_list, my_list[1:])) else "YES"
鉴于您从不使用 e
,我完全不明白您为什么需要 enumerate
。尝试使用 for...else
块:
inp = [1, 2, 3]
for idx in range(len(inp) - 1):
if inp[idx + 1] - inp[idx] != 1:
print("NO")
break
else:
print("YES")
您还可以 zip
将列表的副本移动一位(但是,嗯,制作副本):
for x, y in zip(inp, inp[1:]):
if y - x != 1:
print("NO")
break
else:
print("YES")
或者把它变成一个函数:
def increasing_by_one(inp):
for x, y in zip(inp, inp[1:]):
if y - x != 1:
return False
return True
print('YES' if increasing_by_one(inp) else 'NO')
当(a1+a2+..+an)/n等于(a1+an)/2时,a1,a2,a3..an是连续的。
我不知道 python 但我相信您可以轻松获得列表的第一个、最后一个和计数。
更新,
抱歉,原答案是必要条件,不是充分条件。所以这是不对的。
我正在尝试编写一个程序,如果 list
中的所有数字都是连续的,它将打印 "YES",如果数字不连续,则应该 return "NO"连续的。连续的意思是列表中的每个数字都应该大于前一个元素中的一个。
例如:
它应该为输入打印 "YES":
[3, 4, 5]
、[7, 8, 9]
、[1, 2, 3]
、[0, 1, 2, 3, 4, 5]
.. 等等它应该为输入打印 "NO":
[9, 1, 0]
、[3, 2, 4]
、[5, 5]
、[9, 8, 2, 3, 7]
.. 等等
我为此使用了 enumerate
。
这是我的代码:
inp=[1,2,3,4,5]
flag=0
for index,e in enumerate(inp):
if index!=len(inp)-1:
if inp[index+1]==inp[index]+1:
flag=1
if flag==1:
print ("YES")
else:
print ("NO")
代码工作正常,但我发现它是多余的。
有没有更好的方法来使用枚举或不使用枚举?
您不需要 enumerate
来检查列表的元素是否连续。您可以通过使用 zip
and all
创建一个函数来简单地实现它:
def check_continuity(my_list):
return all(a+1==b for a, b in zip(my_list, my_list[1:]))
同样的结果可以通过 any
with zip
as (similar to all
实现,但与 not
和 !=
进行比较):
def check_continuity(my_list):
return not any(a+1!=b for a, b in zip(my_list, my_list[1:]))
以上函数将 return True
/False
取决于您的列表是否连续。
样本运行:
# Continuous Lists
>>> check_continuity([3, 4, 5])
True
>>> check_continuity([7, 8, 9])
True
>>> check_continuity([1, 2, 3])
True
# Non Continuous Lists
>>> check_continuity([9, 1, 0])
False
>>> check_continuity([3, 2, 4])
False
>>> check_continuity([5, 5])
False
为了打印 "YES"/"NO",您可以在函数调用之外做一个简单的 if..else
检查:
>>> "YES" if check_continuity([1, 2, 3]) else "NO"
'YES'
# OR update the return statement in your function to
# return "NO" if any(a+1!=b for a, b in zip(my_list, my_list[1:])) else "YES"
鉴于您从不使用 e
,我完全不明白您为什么需要 enumerate
。尝试使用 for...else
块:
inp = [1, 2, 3]
for idx in range(len(inp) - 1):
if inp[idx + 1] - inp[idx] != 1:
print("NO")
break
else:
print("YES")
您还可以 zip
将列表的副本移动一位(但是,嗯,制作副本):
for x, y in zip(inp, inp[1:]):
if y - x != 1:
print("NO")
break
else:
print("YES")
或者把它变成一个函数:
def increasing_by_one(inp):
for x, y in zip(inp, inp[1:]):
if y - x != 1:
return False
return True
print('YES' if increasing_by_one(inp) else 'NO')
当(a1+a2+..+an)/n等于(a1+an)/2时,a1,a2,a3..an是连续的。 我不知道 python 但我相信您可以轻松获得列表的第一个、最后一个和计数。
更新,
抱歉,原答案是必要条件,不是充分条件。所以这是不对的。