[英]removing numbers which are close to each other in a list
我有一個類似的清單
mylist = [75,75,76,77,78,79,154,155,154,156,260,262,263,550,551,551,552]
我需要刪除最多四個數字彼此接近的數字,例如:
num-4 <= x <= num +4
我最后需要的列表應該是這樣的:
list = [75,154,260,550]
要么
list = [76,156,263,551]
保留在列表中的數字並不重要,只有一個接近。
我嘗試過這給了我:
for i in range(len(l)):
for j in range(len(l)):
if i==j or i==j+1 or i==j+2 or i == j+3:
pp= l.pop(j)
print(pp)
print(l)
IndexError: pop index out of range
而這與我需要的方式不起作用:
for q in li:
for w in li:
print(q,'////',w)
if q == w or q ==w+1 or q==w+2 or q==w+3:
rem = li.remove(w)
謝謝
以下內容使用groupby
來標識從迭代器開始的運行,這些運行以值start
並且包含與start
的差值不超過4的值。然后,將所有這些start
值收集到一個列表中。
from itertools import groupby
def runs(difference=4):
start = None
def inner(n):
nonlocal start
if start is None:
start = n
elif abs(start-n) > difference:
start = n
return start
return inner
print([next(g) for k, g in groupby(mylist, runs())])
# [75, 154, 260, 550]
這假定輸入數據已被排序。 如果不是,則必須對其進行排序: groupby(sorted(mylist), runs())
。
您可以使用集合或列表來完成此操作,不需要字典。
usedValues = set()
newList = []
for v in myList:
if v not in usedValues:
newList.append(v)
for lv in range(v - 4, v + 5):
usedValues.add(lv)
print(newList)
此方法將所有值存儲在到目前為止您看到的每個值中的4個之內。 當您查看myList中的新值時,只需要通過檢查usedValues來檢查是否已在球場中看到東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.