我想匹配 2 個串列 a 和 b 中的順序值對,并從 b 串列中洗掉值,只保留 b 的第一個較大值(與 a 相比)與 a 處于相同的索引位置。讓我們看一個簡單的例子
a = [206, 252, 272, 315, 349, 374, 394, 406, 440, 466]
b = [209, 220, 244, 255, 285, 301, 327, 358, 380, 396, 419, 447, 476, 492]
首先查看串列 a 中索引 0 處的值,如果索引 0 處的 b 值較小,則應從 b 中洗掉接下來查看 b 中的索引 1,如果小于 a[0],則也應將其洗掉,依此類推。 .
最終結果應該是:
b = [209,255,285,327,358,380,396,419,447,476]
我的想法是嘗試一個嵌套的 for 回圈
for idx, j in enumerate(a):
for jdx, k in enumerate(b):
if b[jdx] < a[idx]:
del b[jdx]
然而,我無法得到我想要的最終結果......
uj5u.com熱心網友回復:
您的代碼很接近,但它不會像您想要的那樣移動到串列中的下一個值。此代碼給出了預期的結果:
a = [206, 252, 272, 315, 349, 374, 394, 406, 440, 466]
b = [209, 220, 244, 255, 285, 301, 327, 358, 380, 396, 419, 447, 476, 492]
output = []
for idx, j in enumerate(a):
for jdx, k in enumerate(b):
if b[jdx] >= a[idx]:
output.append(b[jdx])
break
print(output)
輸出:
[209, 255, 285, 327, 358, 380, 396, 419, 447, 476]
uj5u.com熱心網友回復:
我認為這是一個可以接受的解決方案:
a = [206, 252, 272, 315, 349, 374, 394, 406, 440, 466]
b = [209, 220, 244, 255, 285, 301, 327, 358, 380, 396, 419, 447, 476, 492]
result = []
try:
a_iter = iter(a)
b_iter = iter(b)
a_value = next(a_iter)
b_value = next(b_iter)
while True:
if a_value < b_value:
result.append(b_value)
a_value = next(a_iter)
b_value = next(b_iter)
else:
b_value = next(b_iter)
except StopIteration:
print(result)
uj5u.com熱心網友回復:
簡單有效的解決方案,一旦b[i]大于就轉到下一個索引a[i]:
i = 0
n = len(a)
for b[i] in b:
if i < n and b[i] > a[i]:
i = 1
del b[i:]
或者使用哨兵:
i = 0
a = b[-1:]
for b[i] in b:
if b[i] > a[i]:
i = 1
del b[i:]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/403614.html
標籤:
上一篇:字典作為值和索引作為鍵
