[英]What's the quickest and more efficient way to remove consecutive integers in list?
如果我有一個像這樣的列表: infs = [0, 19, 20, 21, 24]
我想刪除連續的值,但只保留該組中的第一個值,因此我希望得到一個結果: infs = [0, 19, 24]
我的嘗試:
for k,(i,j) in enumerate(zip(infs, infs[1:])):
print(k,i,j)
if j-i == 1:
del infs[k+1]
因為它已被刪除,所以它保留了'21',因此將其循環刪除是個壞主意。
您可以通過將列表本身與自己的列表進行壓縮,但將其第一項填充到列表中,從而對列表中的相鄰項進行配對,以便您可以使用列表理解功能過濾出相差僅1的相鄰對:
[b for a, b in zip(infs[:1] + infs, infs) if b - a != 1]
返回:
[0, 19, 24]
您可以在給定列表的枚舉上使用itertools.groupby
,並使用鍵函數返回數字與其索引之間的差:
from itertools import groupby
[next(g)[1] for _, g in groupby(enumerate(infs), lambda t: t[1] - t[0])]
返回:
[0, 19, 24]
您可以做到:
infs=[0, 19, 20, 21, 24]
[v for (i, v) in enumerate(infs) if i==0 or v - infs[i-1] != 1]
[0、19、24]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.