我有 2 個串列,一個包含浮點值,第二個包含第一個串列中值的出現次數。我怎樣才能創建一個新的串列,它有值次出現?
values = [10.5,20.2, 50.0]
occ = [3,5,1]
結果應該是 [10.5,10.5,10.5,20.2,20.2,20.2,20.2,20.2,50.0]
uj5u.com熱心網友回復:
您可以使用zip并行迭代兩個串列,然后只需重復專案次數并將其添加到結果串列中,如下所示:
result = []
for v,m in zip(values,occ):
result.extend([v for _ in range(m)])
result
[10.5, 10.5, 10.5, 20.2, 20.2, 20.2, 20.2, 20.2, 50.0]
或者評論中建議的串列理解:
[v for v, c in zip(values, occ) for _ in range(c)]
[10.5, 10.5, 10.5, 20.2, 20.2, 20.2, 20.2, 20.2, 50.0]
uj5u.com熱心網友回復:
您可以使用zip嵌套list理解:
values = [10.5,20.2, 50.0]
occ = [3,5,1]
result = [x for x, y in zip(values, occ) for _ in range(y)]
或者,不使用range:
result = [elem for x, y in zip(values, occ) for elem in [x] * y]
輸出:
[10.5, 10.5, 10.5, 20.2, 20.2, 20.2, 20.2, 20.2, 50.0]
uj5u.com熱心網友回復:
你可以用這個:
sum(([v]*m for v, m in zip(values, occ)), [])
不推薦用于大型串列。其實一點都不推薦。
uj5u.com熱心網友回復:
在Python的方法是使用zip串列中理解為證明多次。
您可以使用簡單的回圈并enumerate()達到類似的效果 - 但它會產生更多的代碼行:
values = [10.5,20.2, 50.0]
occ = [3, 5, 1]
result = []
# enumerate returns a tuple: position, value
# of all values of the iterable you give it
for index, times in enumerate(occ):
# use the index to get the value from the other list you
# have and append it multiple times
for _ in range(times):
result.append(values[index])
print(result)
輸出:
[10.5, 10.5, 10.5, 20.2, 20.2, 20.2, 20.2, 20.2, 50.0]
請參閱enumerate() 檔案
uj5u.com熱心網友回復:
output =[]
for i in range(len(values)):
for j in range(occ[i]):
output.append(values[i])
print(output)
[10.5, 10.5, 10.5, 20.2, 20.2, 20.2, 20.2, 20.2, 50.0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/339622.html
上一篇:我如何讓javascript回圈在開始下一次回圈之前等待回圈的每次迭代完成?
下一篇:系數矩陣和回圈挑戰
