如何检查列表是否包含连续数字Python

问题描述 投票:0回答:4

我有以下清单:

l = [1, 2, 3, 4, 10, 11, 12]

通过查看上面的列表,我们可以说它不是连续的。为了发现使用Python,我们可以使用下面的代码行:

print(sorted(l) == list(range(min(l), max(l)+1)))
# Output: False

这会输出 False,因为缺少

5, 6, 7, 8, 9
。我想进一步扩展此功能来检查丢失了多少个整数。另请注意,列表中不允许有重复项。例如:

l = [1, 2, 3, 4, 10, 11, 12, 14]

上面列表的输出应该是

[5, 1]
,因为
5
4
之间缺少
10
整数,并且
1
12
 之间缺少 
14

python python-3.x list sorting
4个回答
4
投票

这回答了评论中的问题:如何找出列表中多个点缺少多少个。这里我们假设列表

arr
已排序并且没有重复项:

it1, it2 = iter(arr), iter(arr)
next(it2, None) # advance past the first element
counts_of_missing = [j - i - 1 for i, j in zip(it1, it2) if j - i > 1]
total_missing = sum(counts_of_missing)

迭代器使我们能够避免制作

arr
的额外副本。如果我们会浪费内存,请省略前两行并将
zip(it1, it2)
更改为
zip(arr, arr[1:])
:

counts_of_missing = [j - i - 1 for i, j in zip(arr, arr[1:]) if j - i > 1]

1
投票

我想这会对你有帮助

L = [1, 2, 3, 4, 10, 11, 12, 14]
C = []
D = True
for _ in range(1,len(L)):
    if L[_]-1!=L[_-1]:
        C.append(L[_]-L[_-1]-1)
        D = False
print(D)
print(C)

这里我检查了

ith index minus 1
处的数字是否等于其先前的索引。如果不是,则 D = false 并将其添加到列表中


0
投票

这是我的尝试:

from itertools import groupby

l = [1, 2, 3, 4, 10, 11, 12, 14]

not_in = [i not in l for i in range(min(l),max(l)+1)]
missed = [sum(g) for i,g in groupby(not_in) if i]

>>> missed
'''
[5, 1]

0
投票
L = [1, 10, 3, 2, 11, 12, 4, 14]
L = sorted( set( L ) )
print( L )

G = str( L[0] )

for i in range( 0, len( L ) - 1 ):
   if L[i] + 1 != L[i+1]:
      G += f'-{L[i]},{L[i+1]}'

print( G )

[1, 2, 3, 4, 10, 11, 12, 14]
1-4,10-12,14
© www.soinside.com 2019 - 2024. All rights reserved.