![](/img/trans.png)
[英]How do I multiply a list of elements with another list of lists in Python
[英]Multiply list of lists with elements of multiplier list Python
我想將下面的列表與乘法器列表的元素相乘。 這樣 multiplier[0] 乘以列表列表中的第一個列表,乘數 [1] 乘以列表列表中的第二個列表等。
謝謝!
到目前為止我已經嘗試過這個:
[a*b for a,b in zip(multiplier,list_of_lists)]
這是列表列表:
[[0, 0, 1, 1],
[1, 0, 0, 0],
[1, 1, 1, 1],
[1, 2, 0, 1]]
乘數列表:
[1.0, 2.0, 0.0, 0.41503749927884376]
如果您將代碼從列表理解轉換為簡單循環,您將看到問題出在哪里:
result = []
for a, b in zip(multiplier, list_of_lists):
result.append(a * b) # appends a copies of list b
這絕對不是你想要做的。 您需要嵌套循環來迭代內部列表的項目:
result = []
for multiplier, sub_list in zip(multipliers, list_of_lists):
new_list = []
for item in sub_list:
new_list.append(multiplier * item)
result.append(new_list)
或者您可以使用嵌套列表理解將其寫得更短(您可以為變量提供更短的名稱以使其看起來更“緊湊” ):
result = [[multiplier * item for item in sub_list] for multiplier, sub_list in zip(multipliers, list_of_lists)]
像這樣的東西(****編輯:請參閱評論中的警告****)?
import numpy as np
a1 = np.array([[0, 0, 1, 1],
[1, 0, 0, 0],
[1, 1, 1, 1],
[1, 2, 0, 1]])
a2 = np.array([1.0, 2.0, 0.0, 0.41503749927884376])
res = (a1.T*a2).T
使用列表理解來實現更緊湊的實現。
multi_list = [[0, 0, 1, 1],[1, 0, 0, 0],
[1, 1, 1, 1], [1, 2, 0, 1]]
mul = [1.0, 2.0, 0.0, 0.41503749927884376]
new_List = [[i * b for i in a] for a, b in zip(multi_list, mul)]
print(new_List)
檢查這樣的事情:
list_of_lists = [[0, 0, 1, 1],
[1, 0, 0, 0],
[1, 1, 1, 1],
[1, 2, 0, 1]]
multiplier_list = [1.0, 2.0, 0.0, 0.41503749927884376]
output_list = [[x * multiplier_list[i] for x in list_] for i, list_ in enumerate(list_of_lists)]
print(output_list)
# [[0.0, 0.0, 1.0, 1.0],
# [2.0, 0.0, 0.0, 0.0],
# [0.0, 0.0, 0.0, 0.0],
# [0.41503749927884376, 0.8300749985576875, 0.0, 0.41503749927884376]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.