填充缺少连续数字的数组并获取索引

时间:2015-07-08 09:29:53

标签: python python-2.7

有列表(没有重复的值):

[67000, 67002, 67003, 67004, 67005, 67006, 67009]

我想在列表中填写缺少的重点数字,所以我想要的输出是:

[67000, 67001, 67002, 67003, 67004, 67005, 67006, 67007, 67008, 67009]

并获取已添加到列表中的项目的索引:

indx_list = [1,7,8]

这是我的尝试:

lista_num = [67000, 67002, 67003, 67004, 67005, 67006, 67009]
for i in xrange(len(lista_num)-1):
    if lista_num[i] != lista_num[i+1]-1:
        print lista_num[i]
        lista_n = lista_num[i]
        lista_nu = lista_num[i+1]

        while lista_n < lista_nu-1:
            lista_n = lista_n + 1
            lista_num.insert(i+1, lista_n)
    else:
        print "ok"

但我得到以下输出,这不是所需的输出。我想我搞乱了索引。

[67000, 67001, 67002, 67003, 67004, 67005, 67006, 67009]

我没有尝试过获取项目索引的部分,因为获取有关数字列表的第一步甚至无法正常工作。

如何修复代码并实现目标?提前谢谢。

3 个答案:

答案 0 :(得分:3)

假设您的原始列表是

a = [67000, 67002, 67003, 67004, 67005, 67006, 67009]

因此可以使用

找到所需的目标列表
out = range(min(a), max(a) + 1)

可以使用

找到添加的索引
[i for (i, v) in enumerate(out) if v not in a]

(最后一行的复杂性是二次的;要将它减少为线性,你可以做到

sa = set(a)
[i for (i, v) in enumerate(out) if v not in sa]

答案 1 :(得分:1)

您的代码中有2个问题,首先是您的主要len(lista_num)循环的范围,您需要循环-1而您不需要i,其次是您需要的在while循环中增加lista_num = [67000, 67002, 67003, 67004, 67005, 67006, 67009] for i in xrange(len(lista_num)): if lista_num[i] != lista_num[i+1]-1: lista_n = lista_num[i] lista_nu = lista_num[i+1] while lista_n < lista_nu-1: lista_n = lista_n + 1 lista_num.insert(i+1, lista_n) i=i+1 print lista_num

[67000, 67001, 67002, 67003, 67004, 67005, 67006, 67007, 67008, 67009]

结果:

itertools

但作为一种更加pythonic的方式,您可以使用from itertools import izip,chain lista_num = [67000, 67002, 67003, 67004, 67005, 67006, 67009] lista_num.append(lista_num[-1]+1) print list(chain.from_iterable(xrange(i,j) for i,j in izip(lista_num,lista_num[1:]))) [67000, 67001, 67002, 67003, 67004, 67005, 67006, 67007, 67008, 67009] 模块:

{{1}}

答案 2 :(得分:0)

您的列表似乎已排序,因此根据定义,第一个条目是最小的,最后一个条目是最大条目,无需查找它们。如果总是如此,只需创建一个新列表,如下所示:

lista_num = [67000, 67002, 67003, 67004, 67005, 67006, 67009]
listb_num = range(lista_num[0], lista_num[-1]+1)

要确定添加了哪些项目,您可以执行以下操作:

missing_items_set = set(listb_num).difference(set(lista_num))
print missing_items_set

set([67008, 67001, 67007])

这可以转换为列表并排序:

missing_items_list = list(missing_items_set)
missing_items_list.sort()
print missing_items_list

[67001, 67007, 67008]

如果从每个中减去lista_num[0],那将为您提供索引。