我有 2 個串列,一個包含最大值索引,另一個包含最小值索引。
最大值:
c = [209, 255, 285, 327, 358, 380, 396, 419, 447, 476]
最小值:
d = [206, 252,254 ,272, 315, 349, 374, 394, 406,413, 440, 466]
如果在 c 中對應的最大值之前有多個最小值,我想修改 d 向量并保留第一個最小值。串列包含從時間序列派生的索引值。串列 c 中的最大值是正確的,不應修改。但是, d 串列包含多個分鐘到相應的最大索引。如果有多個,規則應該是只保留 d 中的第一個最小索引。所以第一個最小/最大索引對是 206/209,第二個 252/255..so 在這種情況下下降 254..第三個 272/285 和等等“在簡化的示例中,我想洗掉 d 串列中的 254 和 413”最小/最大對應該是:
c = [209, 255, 285, 327, 358, 380, 396, 419, 447, 476]
d_new = [206, 252, 272, 315, 349, 374, 394, 406, 440, 466]
我提出了一個建議,但是如果在 c 中相應的最大值之前有多個最小值,則此示例將洗掉 d 中的第一個最小值。
c = [209, 255, 285, 327, 358, 380, 396, 419, 447, 476]
d = [206, 252,254 ,272, 315, 349, 374, 394, 406, 413, 440, 466]
#beginners trick for reversed looping of max min
c_rev = c[::-1]
d_rev = d[::-1]
output2 = []
for idx, j in enumerate(c_rev):
for jdx, k in enumerate(d_rev):
if d_rev[jdx] <= c_rev[idx]:
output2.append(d_rev[jdx])
break
d_new = output2[::-1]
print(d_new)
print(d_new)
[206, 254, 272, 315, 349, 374, 394, 413, 440, 466]
欣賞建議...
uj5u.com熱心網友回復:
我添加了一個flag變數,它保存當前的最大值,并將跳過小于它的值d
c = [209, 255, 285, 327, 358, 380, 396, 419, 447, 476]
d = [206, 252,254 ,272, 315, 349, 374, 394, 406, 413, 440, 466]
#beginners trick for reversed looping of max min
c_rev = c
d_rev = d
output2 = []
flag = 0
for idx, j in enumerate(c_rev):
for jdx, k in enumerate(d_rev):
if k < flag:
continue
if d_rev[jdx] <= c_rev[idx]:
output2.append(d_rev[jdx])
flag = j
break
d_new = output2
print(d_new)
print(d_new)
# [206, 252, 272, 315, 349, 374, 394, 406, 440, 466]
uj5u.com熱心網友回復:
以下內容可以幫助您找到正確的方向,但可能還不完全正確。
c = [209, 255, 285, 327, 358, 380, 396, 419, 447, 476]
d = [206, 252, 254 ,272, 315, 349, 374, 394, 406, 413, 440, 466]
d_new2 = []
i = 0
for e in c:
if d[i] <= e:
d_new2.append(d[i])
while i < len(d) and d[i] <= e:
i = i 1
print(d)
print(d_new2)
所以這個想法是第一個元素d小于qualifying中的對應元素e。然后e跳過所有小于的連續值。
我不相信這是一個正確的解決方案,但我會把它留給 OP 來判斷。就像是
c = [ 1, 2, 3, 4, 5, 6 ]
d = [100, 101, 102, 103, 104, 105, 106 ]
產生和空陣列作為輸出。
至少對于原始輸入,以上產生:
ronald@oncilla:~/tmp$ python x.py
[206, 252, 254, 272, 315, 349, 374, 394, 406, 413, 440, 466]
[206, 252, 272, 315, 349, 374, 394, 406, 440, 466]
uj5u.com熱心網友回復:
這是一個應該完成這項作業的函式,并且應該處理邊緣情況:
def filter_min_values(max_values, min_values):
"""The input lists must be sorted
>>> filter_min_values([], [])
[]
>>> filter_min_values([10], [1])
[1]
>>> filter_min_values([10], [1])
[1]
>>> filter_min_values([10], [11])
[]
>>> filter_min_values([10], [1, 11])
[1]
>>> filter_min_values([10, 11, 12], [1])
[1]
>>> c = [209, 255, 285, 327, 358, 380, 396, 419, 447, 476]
>>> d = [206, 252, 254, 272, 315, 349, 374, 394, 406, 413, 440, 466]
>>> filter_min_values(c, d)
[206, 252, 272, 315, 349, 374, 394, 406, 440, 466]
"""
new_min_values = []
min_index = 0
for max_index, max_value in enumerate(max_values):
if min_index >= len(min_values):
break
min_value = min_values[min_index]
if min_value <= max_value:
new_min_values.append(min_value)
while min_index < len(min_values) and min_values[min_index] <= max_value:
min_index = 1
return new_min_values
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405000.html
標籤:
下一篇:二和leetcodeclang
