簡體   English   中英

如何將嵌套列表的所有元素相乘

[英]How to multiply all elements of a nested list

我剛開始使用Python,需要一些幫助。 我有以下包含列表的詞典列表:

>>> series
[{'data': [2, 4, 6, 8], 'name': 'abc'}, {'data': [5, 6, 7, 8], 'name': 'efg'}]
>>> 

如何在不使用循環的情況下將內部列表的每個元素乘以一個常數,然后就位。

所以,如果我有:

>>> x = 100

該代碼應導致:

>>> series
[{'data': [200, 400, 600, 800], 'name': 'abc'}, {'data': [500, 600, 700, 800], 'name': 'efg'}]

我可以運用有限的知識得出的最好的結論是(而且我什至不知道“ [:]”是什么):

>>> for s in series:
...     s['data'][:] = [j*x for j in s['data']]
... 
>>> 

如何刪除for循環?

代碼的解釋或指向文檔的指針也很好。

謝謝!

如何刪除for循環?

您可以結合使用list和dict理解來刪除循環:

>>> [{k:[j*100 for j in v] if k == 'data' else v for k,v in d.items()}
     for d in series]
[{'data': [200, 400, 600, 800], 'name': 'abc'}, {'data': [500, 600, 700, 800], 'name': 'efg'}]

但是,這種方法可讀性較差,並且不再就地進行乘法運算。

因此,我認為您不應該嘗試刪除循環。 相反,您應該繼續做您已經在做的事情。

代碼的解釋或指向文檔的指針也很好。

我認為解釋上面的代碼沒有多大意義,因為我們已經確定它不是您想要的。 但是也許您想知道[:]在現有代碼中的作用。 為此,我請您參考此相關問題,以詳細說明該問題:

您可以使用map刪除列表理解中的for循環:

for s in series:
    s['data'] = map(lambda d: d*x, s['data'])

通過遍歷列表中的每個元素來映射乘數:

series = [{'data': [2, 4, 6, 8], 'name': 'abc'}, {'data': [5, 6, 7, 8], 'name': 'efg'}]
x=100

def mult_elements(series, x):
    for s in series:
        s['data']= map(lambda y:y*x, s['data'])
    return series

print mult_elements(series, x)

以列表理解的方式做一個襯里:

series = [{'data': map(lambda y:y*x, s['data']), 'name':s['name']} for s in series]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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