我有一個很長的numpy陣列,它有重復值的后果,比如說:
My_list = [0.24, 0.02, 0。 02, 0.02, 5, 7, 9, 8。 4, 97, 0.56, 34, 0. 45, 0.02, 0.02,
0.02, 0.02, 0.02, 0.11, 12, 0。 16, 19, 23, 27。32, 37, 45, 0。 02, 0.02,
0.02, 0.02, 0.02, 0.02。 02, 18, 24, 34, 45, 0。 65, 68, 53, 48, 98, 78,
564, 343, 3534, 3435, 435, 131, 2435354, 45456, 232]
我怎樣才能在我的串列中不出現每一個長度不等的重復數字0.02的序列,而是用 "重復后出現的相同的下一個數字序列 "來代替它們呢?
結果應該是:
[0. 24, 5, 7, 9, 5, 7, 9, 8。 4, 97, 0.56, 34, 0. 45, 0.11, 12,
0.16, 19, 23, 0.11, 12, 0。 16, 19, 23, 27, 32, 37, 45, 18, 24,
34, 45, 0。 65, 68, 18, 24, 34, 45, 0。 65, 68, 53, 48, 98, 78,
564, 343, 3534, 3435, 435, 131, 2435354, 45456, 232 ]
uj5u.com熱心網友回復:
向后iterate through the list, keeping track of the last known unique value. If you detect a dup, then start replacing the values with the last known value until you stop hitting dups.
My_list = [0.24, 0.02, 0。 02, 0.02, 5, 7, 9, 8。 4, 97, 0.56, 34, 0. 45, 0.02, 0.02,
0.02, 0.02, 0.02, 0.11, 12, 0。 16, 19, 23, 27。32, 37, 45, 0。 02, 0.02,
0.02, 0.02, 0.02, 0.02。 02, 18, 24, 34, 45, 0。 65, 68, 53, 48, 98, 78,
564, 343, 3534, 3435, 435, 131, 2435354, 45456, 232]
outlist = My_list.copy()
last_unique=My_list[-1]
print("last unique" str(last_unique)
for i,n in reversed(list(enumerate(My_list)) )。
if My_list[i]! =My_list[i-1]。
print("non equality reassign last unique"/span>)
print(My_list[i],My_list[i-1] )
last_unique=My_list[i]。
print(last_unique)
elif My_list[i]==My_list[i-1] 。
outlist[i]=last_unique
print(outlist)
[0.24, 0. 02, 5, 5, 5, 7, 9, 8。 4, 97, 0.56, 34, 0. 45, 0.02, 0.11, 0.11, 0.11,
0.11, 0.11, 12, 0。 16, 19, 23, 27。32, 37, 45, 0。 02, 18, 18, 18, 18, 18, 18,
24, 34, 45, 0。 65, 68, 53, 48, 98, 78。564, 343, 3534, 3435, 435, 131,
2435354, 45456, 232]
uj5u.com熱心網友回復:
有兩種邊緣情況需要考慮,你應該在解決問題之前決定答案。
[0.02, 0.02, 0.02, 5]/code>.
我們是否不改變這些:
[0.02, 0.02, 0.02, 5]?
或者洗掉那些我們不能替換的:
[5, 5]?
或者用None替換它們:
[5, None, None, 5]? [0.02, 0.02, 0.02, 5, 10, 10, 2, 3, 4]。 我們是否從左到右復制:
[5, 10, 10, 5, 2, 3, 2, 3, 4]?
還是從右到左:[5, 2, 3, 5, 2, 3, 2, 3, 4]? 這里有一個解決方案,從右到左進行替換,并且在沒有足夠的元素進行替換的情況下,不改變重復序列:
def replace_repeats(seq)。
new_seq = seq[:]
repeat_end = len(seq)
for i in range(len(seq)-1, -1, -1)。)
if i == 0 or seq[i-1] != seq[i] 。
if repeat_end > i 1 and 2 * repeat_end - i <= len(seq)。
new_seq[i: repeat_end] = new_seq[repeat_end : 2 * repeat_end - i]
repeat_end = i
return new_seq
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/309452.html
標籤:
