繁体   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