我有 x 個引數串列和一個包含 x 個串列的串列。通過對每個串列中的每個相應專案求和來計算總分。
例如,我有 2 個串列和一個主串列,如下所示:
a = [1,2]
b = [2,1]
mainList = ['a','b']
我想要所有獨特的組合 - 這是由:
for L in range(0, len(mainList) 1):
for subset in itertools.combinations(mainList, L):
print(subset)
輸出:
()
('a',)
('b',)
('a', 'b')
對于每個排列,我希望通過對每個包含串列的專案求和來創建一個包含總分的新串列。
例如,在這種情況下,所需的輸出將是:
[0,0]
[1,2] #i.e. just a
[2,1] #i.e. just b
[3,3] #i.e. a b
這就是我卡住的地方 - 我不確定如何獲得上面所需的輸出。
我懷疑我把它復雜化了,而且有一個快速的方法可以做到這一點。
uj5u.com熱心網友回復:
用于zip(*...)“轉置”串列(例如轉換[[1, 2], [3, 4]]為[(1, 3), (2, 4)]),然后對元素求和:
a = [1, 2]
b = [3, 4]
main = [a, b] # make main a list of the lists rather than text labels
for length in range(len(main) 1):
for subset in itertools.combinations(main, length):
result = [sum(t) for t in zip(*subset)]
if result:
print(result)
else:
print([0] * len(main[0]))
但是請注意,第一個總和(沒有串列的總和)是[]所以我們需要一個特定的行來替換它。
如果您需要保留標簽,請'a', 'b'制作main字典:
a = [1, 2]
b = [3, 4]
main = {'a': a, 'b': b}
list_length = len(list(main.values())[0])
for length in range(len(main) 1):
for subset in itertools.combinations(main, length):
if subset:
print(subset, [sum(t) for t in zip(*[main[key] for key in subset])])
else:
print(subset, [0] * list_length)
或者,也許更簡單,使用pandas:
import pandas as pd
main = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
for length in range(len(main) 1):
for subset in itertools.combinations(main, length):
print(subset, main[list(subset)].sum(axis=1).to_list())
uj5u.com熱心網友回復:
您需要以某種方式將 a & b 字串與相應的串列連接起來。我認為最干凈的方法是擁有一個包含串列名稱和串列及其值的字典。
這是一個例子:
list_dict = {'a': a, 'b': b}
for L in range(0, len(mainList) 1):
for subset in itertools.combinations(mainList, L):
temp = [0, 0]
for sub in subset:
temp[0] = list_dict[sub][0]
temp[1] = list_dict[sub][1]
print(temp)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/433037.html
下一篇:SwiftUI無法影片影像過渡
