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次を使用して、リスト内包表記のループを削除できます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 に答える
0

for ループを削除するにはどうすればよいですか?

リスト内包表記と辞書内包表記を組み合わせてループを削除できます。

>>> [{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 に答える