Python中能否判断列表中的数字是否连续?

问题描述 投票:0回答:5

我正在尝试编写一个函数来确定列表中的数字是否按连续顺序排列。我的第一个想法是看看我是否可以让程序检查一个数字与它之前的数字之间的差异是否始终等于 1(例如位置 x - (x-1) == 1),但还没有找到方法将 x 定义为任何给定位置,仅限特定位置。

这是我迄今为止的尝试:

def is_consecutive(a_list):
    if a_list[x] - a_list[x-1] == 1:
        print("The list is consecutive.")
    else:
        print("The list is not consecutive.")

is_consecutive([1,2,3,4,5])

有没有办法定义 x 以便它引用列表中的任何和所有位置而不输入特定的位置编号?

或者我想得太多了,有一个更简单的解决方案吗?

python variables
5个回答
0
投票

您缺少获取每个元素的迭代器部分。无需修改太多代码:

def is_consecutive(a_list):
    for x in range(1, len(a_list): # iterate through each element of the list (starting at the second, index = 1)
        if a_list[x] - a_list[x-1] != 1: # evaluate your condition
            print("The list is not consecutive.")
            return # no need to work more
    print("The list is consecutive.") # if you arrived here, it means the list is consecutive


0
投票

但还没有找到一种方法将 x 定义为任何给定位置,只能定义特定位置

嗯,这就是 loops 的用途。这是最简单的版本

def is_consecutive(a_list):
    is_consecutive = True
    for x in range(1, len(a_list)):
        if a_list[x] - a_list[x-1] != 1:
            is_consecutive = False
            break
    if is_consecutive:
        print("The list is consecutive.")
    else:
        print("The list is not consecutive.")

Python 的

zip
函数 使编写变得更容易。

def is_consecutive(a_list):
    is_consecutive = True
    for current, previous in zip(a_list[1:], a_list[:-1])):
        if current - previous != 1:
            is_consecutive = False
            break

或使用

all
作为一项陈述:

    is_consecutive = all(current - previous == 1
                         for current, previous
                         in zip(a_list[1:], a_list[:-1]))

0
投票

这样的东西应该有效。

def is_consecutive(array: list) -> bool:
    sorted_lst = sorted(array)
    for i in range(1, len(sorted_lst)):
        if sorted_lst[i] != sorted_lst[i - 1] + 1:
            return False
    return True

0
投票

如果所有数字都是连续的,则所有数字与其索引的差值将相同。因此,一组这些差异将只有一个项目:

def is_consecutive(L):
    return len({n-i for i,n in enumerate(L)}) == 1

print(is_consecutive([5,6,7])) # True
print(is_consecutive([7,9,8])) # False

-1
投票

我不确定我是否理解了您的问题,您是否正在寻找一种迭代列表元素的方法?如果是这样,请使用

for i in range(len(your_list)):
    # DO THINGS

解决这个问题的一个简单方法是检查列表中最大值和最小值之间的差是否等于列表长度减一,就像这样:

def is_consecutive(lst):
    min_val = min(lst)

    max_val = max(lst)
    expected_length = max_val - min_val + 1

    return len(lst) == expected_length

  
© www.soinside.com 2019 - 2024. All rights reserved.