如何检查列表中的连续数字?

5

这是我的作业。

问题是找到一种方法来检查列表中的项是否连续。

以下是我编写的代码:

def consecutive(var):
for x in range(2, len(var)):
    forward = var[x] - var[x-1]
    backward = var[x-1] - var[x-2]
if forward == backward:
    return True
else:
    return False

var = []
print 'Enter your number:'
while True:
    num = raw_input()
    if num == '':
        break
    var += [int(num)]

print consecutive(var)

如果我输入1、2、3、4、5这些数字,那么将返回True。

如果我输入2、6、3、9、7、1、4这些数字,那么将返回False。

在这里,我成功地分别返回了True或False值。

但有两个问题让我感到困扰,因为如果我使用我的代码来解决这些问题,我得不到想要的值(会出现错误)。

第一个问题:空列表是否被认为是连续的列表?

第二个问题:包含单个值的列表是否被认为是连续的列表?

您能帮助我吗?


3
这些是你的作业中应该定义的边界情况。然而,在我看来,一个空列表或者只有一个元素的列表确实应该被视为具有连续顺序,因为无论如何它们都是“已排序”的。 - miradulo
1
我认为,要使列表连续,必须至少有两个元素进行比较。 - jtitusj
@JohnTitusJungao:虽然这不是一个疯狂的观点,但它违反了惯例。我们称[][1]为已排序,因为[] == sorted([])[1] == sorted([1]),即使没有两个元素,因为没有未排序的元素。类似的逻辑应该适用于连续的元素,在我看来。 - DSM
@DSM 虽然我最初的想法是同意你的观点,但现在我不确定了。显然这只是语义学问题,但如果问题指定了一个具有“连续元素”的列表,你真的可以将其归因于排序和集合吗?或者这是否隐含地将您的列表限制为具有两个元素?(问这个问题是因为我不确定:P) - miradulo
@DonkeyKong:这只是一种惯例,在数学中的标准惯例是允许在定义中出现虚假真理 - DSM
@DSM 好的,没问题,同意。 - miradulo
1个回答

2

根据评论中讨论的数学惯例,如果您的作业没有更精确的规定,那么将空列表和只有一个元素的列表视为连续是标准的。

根据真空真理的逻辑,如果列表没有连续顺序,则需要足够的元素(2个)来打破此排序条件。要在现有代码中处理此问题,您可以在主要检查之前执行一个检查,以确保空列表和只有一个元素的基本情况返回True


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接