【问题标题】:How to check consecutive number in list?如何检查列表中的连续数字?
【发布时间】:2016-04-16 18:02:18
【问题描述】:

这是我的作业。

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

以下是我写的代码:

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 值。

但是有两个问题让我感到不安,因为如果我使用我的代码来解决问题,我不会得到我想要的值(它会给我一个错误)

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

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

你愿意帮助我吗?

【问题讨论】:

  • 这些是应该在你的作业中定义的边缘情况。然而,在我看来,一个空列表或一个包含一个元素的列表确实应该被视为具有连续顺序,因为通过任何构造它们都是“排序的”。
  • 我会说一个列表要连续,你必须至少有两个元素才能进行比较。
  • @JohnTitusJungao:虽然这不是一个疯狂的观点,但它违反了惯例。我们称[][1] 已排序,因为[] == sorted([])[1] == sorted([1]) 即使没有两个元素,因为没有未排序的元素。类似的逻辑应该适用于连续元素,恕我直言。
  • @DSM 虽然我最初的想法是同意你的观点,但现在我不确定。这显然只是语义,但如果问题指定了一个带有连续元素的列表,你真的可以将其归结为排序和集合吗?或者这是否隐含地将您的列表限制为具有两个元素? (问是因为我不确定:P)
  • @DonkeyKong:这实际上只是一个约定,数学中的标准约定是在定义中允许vacuous truth

标签: python python-2.7


【解决方案1】:

按照 cmets 中讨论的数学约定,如果您的作业中没有更精确地指定,则将空列表和具有单个元素的列表视为 连续 是标准的。

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

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多