有列表(没有重复的值):
[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]
我没有尝试过获取项目索引的部分,因为获取有关数字列表的第一步甚至无法正常工作。
如何修复代码并实现目标?提前谢谢。
答案 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]
,那将为您提供索引。