1

我刚开始使用 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 循环?

对代码的解释或指向文档的指针也很好。

谢谢!

4

3 回答 3

0

如何删除 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'}]

然而,这不太可读,不再进行原地乘法。

所以我认为你不应该尝试删除循环。相反,你应该继续做你已经在做的事情。

对代码的解释或指向文档的指针也很好。

我认为解释上面的代码没有多大意义,因为我们已经确定它不是您想要的。但也许您想知道[:]现有代码中的作用。为此,我建议您参考这个相关问题,详细解释它:

于 2012-07-01T07:30:37.483 回答
0

您可以使用以下方法删除for列表理解中的循环map

for s in series:
    s['data'] = map(lambda d: d*x, s['data'])
于 2012-07-01T07:36:24.880 回答
0

通过遍历列表中的每个元素来映射乘数:

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]
于 2012-07-01T07:39:25.350 回答