[英]How to replace equal consecutive numbers in a list to nan?
我正在嘗試將列表中相等的連續數字替換為 nan。 當有奇數個相等的連續數字時,我無法替換所有值。
這是我的代碼,非常簡單:
list= [1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
for i in range(0,len(list)):
if list[i] == list[i-1]:
list[i] = list[i-1] = np.nan
Out: [nan, nan, nan, nan, 1, nan, nan, nan, nan, nan, nan, 3, nan, nan, 5]
另一個問題,如果我只想替換那些重復超過 3 次的值,例如分別重復 5 次和 4 次的數字 1 或 2。
這就是我要的:
Out: [nan, nan, nan, nan, nan, nan, nan, nan, nan, 3, 3, 3, 4, 4, 5]
使用Counter
跟蹤列表中的元素並使用條件list comprehension
import numpy as np
from collections import Counter
list1 = [1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
counter = Counter(list1)
list_new = [np.nan if counter[i] > 3 else i for i in list1]
print(list_new)
Output:
[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3, 3, 3, 4, 4, 5]
替代解決方案
from itertools import groupby
b = [(k, sum(1 for i in g)) for k,g in groupby(list1)]
list2 = []
for i,j in b:
if j > 3:
list2.extend([np.nan]*j)
else:
list2.extend([i]*j)
print(list2)
Output:
[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3, 3, 3, 4, 4, 5, 3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.