簡體   English   中英

將列表列表與乘法器列表 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM