簡體   English   中英

刪除列表中連續整數的最快,更有效的方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM