Python:在有序lis中查找缺失的最小正整数

2024-03-28 18:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我要找到名单上第一个丢失的号码。如果没有数字丢失,下一个数字应该是最后一个+1。在

它应该首先检查第一个数字是否大于1,如果是,那么新的数字应该是1。在

这是我试过的。问题就在这里:if next_value - items > 1: 结果是一个错误,因为在结尾和开头我都有一个None。在

list = [1,2,5]
vlans3=list

for items in vlans3:
    if items in vlans3:

        index = vlans3.index(items)
        previous_value = vlans3[index-1] if index -1 > -1 else None
        next_value = vlans3[index+1] if index + 1 < len(vlans3) else None
        first = vlans3[0]
        last = vlans3[-1]

                #print ("index: ", index)
        print ("prev item:", previous_value)
        print ("-cur item:", items)
        print ("nxt item:", next_value)

        #print ("_free: ", _free)
        #print ("...")
        if next_value - items > 1:
            _free = previous_value + 1
            print ("free: ",_free)
            break

print ("**************")
print ("first item:", first)
print ("last item:", last)
print ("**************")

另一种方法:

^{pr2}$

如果数字之间有间隔,则结果为正确的数字,但如果没有剩余空格错误发生:IndexError: list index out of range。但是我需要指定,如果没有空闲空间,它应该给出一个新的数字(last+1)。但是下面的代码会给出一个错误,我不知道为什么。在

if free = []:
    print ("no free")
else:
    print ("free: ", free)

Tags: nonefreeindexifvalue错误items数字
2条回答

首先避免对变量使用保留字list。 第二次使用尝试:除了迅速而巧妙地避免此类问题。在

def free(l):
    if l == []: return 0
    if l[0] > 1: return 1
    if l[-1] - l[0] + 1 == len(l): return l[-1] + 1
    for i in range(len(l)):
        try:
            if l[i+1] - l[i] > 1: break
        except IndexError:
            break
    return l[i] + 1

要获取不是vlans3成员的最小整数:

ints_list = range(min(vlans3), max(vlans3) + 1)
missing_list = [x for x in ints_list if x not in vlans3]
first_missing = min(missing_list)

但是,如果列表中的最小值大于1,则返回1;如果没有缺少值,则返回最后一个值+1,因此这将变为:

^{pr2}$

相关问题 更多 >