我有以下清单:
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
这回答了评论中的问题:如何找出列表中多个点缺少多少个。这里我们假设列表
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]
我想这会对你有帮助
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 并将其添加到列表中
这是我的尝试:
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]
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