在缺失的数字中插入1的问题

时间:2019-03-12 08:20:03

标签: python

我想在给定列表中找到缺失的数字。这里的问题是,当1不在列表中时,它将不会返回1作为缺少的数字之一。另一个是当列表无序时,并且1是列表中的最后一个数字,它将返回1作为缺少的数字之一。

try {
    command.CommandText = sb.ToString();
    returnValue = command.ExecuteNonQuery();

    // Try this.
    throw new Exception("See where this goes.");

    return returnValue == 1;
} finally {
    command.Dispose();
}

我想念什么?

4 个答案:

答案 0 :(得分:2)

如果列表可以是无序的,请不要使用num_list[0]num_list[-1]作为范围限制。改为使用minmax

original_list = list(range(min(num_list), max(num_list)+1))

此外,可以从set的返回值(列表/迭代器,取决于Python版本)直接构建range

编辑:如果您始终希望最小值1:

original_list = list(range(1, max(num_list)+1))

答案 1 :(得分:1)

这只是行不通,问题定义不明确。您根本无法从不遗漏的数字列表中知道哪些遗漏了 just

如果输入为[1,2,3],怎么说4应该存在?如果输入为[],那么您一无所知。

OP的评论证实了这一点:

  

我不能仅以1开头,因为将从数据库中选择数字。这些是基于用户选择的号码。 1可能从一开始就不在列表中,我也不想将其从1开始。

甚至都不知道您的示例中是否缺少1实际上是错误的。

该功能无法实现,必须是千里眼。

您需要创建一个以(number_list, minvalue, maxvalue)作为参数的新函数,并弄清楚如何提供它们。

答案 2 :(得分:0)

这是做到这一点的一种方法。

def missing_numbers(num_list):
    start = 1
    end = num_list[len(num_list)-1]
    missing_list = [item for item in range(start, end) if item not in num_list]
    return missing_list

O / P

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

答案 3 :(得分:0)

在您的约束下,我建议您确定一个开始值和结束值,并确保它们遵循这些规则,但似乎1-num_list中的最大值会起作用

def missing_numbers(num_list):
    return list(set(num_list) ^ set(range(1, max(num_list) + 1)))

这也可以通过itertools.filterfalse

完成
from itertools import filterfalse

def missing_numbers(num_list):
    return list(filterfalse(num_list.__contains__, range(1, max(num_list) + 1)))

修改

由于没有人能对OP想要的startend提出充分的理由。我说,让该方法接受一个开始值和一个结束值。

from itertools import filterfalse

def missing_numbers(numbers, start = 1, end = None):
    if not end:
        end = max(numbers) + 1
    if start >= end:
        raise TypeError("End must be greater than start")

    #I just prefer the readability of the filterfalse method over
    #the set one, but use whatever fits your fancy
    return list(filterfalse(numbers.__contains__, range(start, end)))