16

Pythonで、リスト内包表記または同様の方法でオブジェクトのリストを更新することは可能ですか? たとえば、リスト内のすべてのオブジェクトのプロパティを設定したいと思います。

result = [ object.name = "blah" for object in objects]

またはmap機能付き

result = map(object.name = "blah", objects)

プロパティ設定でforループせずに実現できますか?

(注: 上記の例はすべて意図的に間違っており、アイデアを表現するためだけに提供されています)

4

1 に答える 1

39

最終的に、割り当ては「式」ではなく「ステートメント」であるため、ラムダ式またはリスト内包表記では使用できません。あなたがしようとしていることを達成するには、通常の機能が必要です。

それを行うビルトインがあります(のリストを返しますNone):

[setattr(obj,'name','blah') for obj in objects]

でも使わないでください。ループを使用するだけです。 効率の違いに気付くとは思えませんが、ループははるかに明確です。

本当にワンライナーが必要な場合 (理由はわかりませんが):

for obj in objects: obj.name = "blah"

ほとんどの人がリスト内包表記を使いたいと思っているのは、誰かが「速い」と言ったからです。それは正しいですが、新しいリストを作成するためだけです。副作用のためにリスト内包表記を使用しても、パフォーマンスが向上する可能性は低く、コードの可読性が低下します。実際、同等のループの代わりにリスト内包表記を使用する最も重要な理由は、.append読みやすいからです。

于 2013-05-20T13:19:15.067 に答える