我有一個元組串列串列。每個內部串列包含 3 個元組,每個元組有 2 個元素:
[
[(3, 5), (4, 5), (4, 5)],
[(7, 13), (9, 13), (10, 13)],
[(5, 7), (6, 7), (7, 7)]
]
我需要得到一個包含 3 個元組的串列,將所有這些元素“垂直”相加,如下所示:
(3, 5), (4, 5), (4, 5)
(7, 13), (9, 13), (10, 13)
(5, 7), (6, 7), (7, 7)
|| || ||
[(15, 25), (19, 25), (21, 25)]
因此,例如,結果串列中的第二個元組由初始串列中的第二個元組的總和給出
(4 9 6, 5 13 7) = (19, 25)
我正在嘗試使用串列/元組推導,但我對此有點迷茫。
uj5u.com熱心網友回復:
您可以使用zipandsum更長的時間,但無需依賴于numpy您是否還沒有使用它。
>>> [tuple(sum(v) for v in zip(*t)) for t in zip(*x)]
[(15, 25), (19, 25), (21, 25)]
外部zip將相應的元組配對在一起;內部zip將這些元組的對應元素配對在一起以進行加法。
uj5u.com熱心網友回復:
你可以用 numpy 很容易地做到這一點。在軸 0 上使用 sum。
import numpy as np
l = [
[(3, 5), (4, 5), (4, 5)],
[(7, 13), (9, 13), (10, 13)],
[(5, 7), (6, 7), (7, 7)]
]
[tuple(x) for x in np.sum(l,0)]
輸出
[(15, 25), (19, 25), (21, 25)]
uj5u.com熱心網友回復:
你可以用純 python 代碼來做到這一點。
lst = [
[(3, 5), (4, 5), (4, 5)],
[(7, 13), (9, 13), (10, 13)],
[(5, 7), (6, 7), (7, 7)]
]
lst2 = []
for a in range(len(lst[0])):
l = []
for i in range(len(lst)):
l.append(lst[i][a])
lst2.append(l)
output = []
for a in lst2:
t = [0 for a in range(len(lst[0][0]))]
for i in range(len(a)):
for z in range(len(a[i])):
t[z] = a[i][z]
output.append(tuple(t))
print(output)
如果您更改串列,那么它是有效的。
輸出
IN:
lst = [
[(3, 5), (4, 5), (4, 5)],
[(7, 13), (9, 13), (10, 13)],
[(5, 7), (6, 7), (7, 7)]
]
OUT:
[(15, 25), (19, 25), (21, 25)]
IN:
lst = [
[(3, 5,2), (4, 5,3), (4, 5,1)],
[(7, 13,1), (9, 13,3), (10, 13,3)],
[(5, 7,6), (6, 7,3), (7, 7,7)]
]
OUT:
[(15, 25, 9), (19, 25, 9), (21, 25, 11)]
uj5u.com熱心網友回復:
data = [
[(3, 5), (4, 5), (4, 5)],
[(7, 13), (9, 13), (10, 13)],
[(5, 7), (6, 7), (7, 7)]
]
result = [tuple(sum(x) for x in zip(*t)) for t in zip(*data)]
print(result)
這是一個單線,我認為你不能得到比這更多的pythonic。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/465612.html
上一篇:json.loads()(JSONDecodeError:預期值:第1行第1列(字符0))
下一篇:從列的子集中采樣一行
