5

foosのオブジェクトのリストがあります。新しいリストを作成するためのループがあります。

foo1 = {id:1,location:2}
例えばfoos = [foo1,foo2,foo3]

次に、場所に基づいて新しいリストを作成します。

new_list = []
for foo in foos:
  if foo.location==2:
      new_list.append(foo)

私が知りたいのは、私がこのようなことをすることができる方法はありますか

new_list = []
new_list = map(if foo.location ==2,foos) // this is wrong code but is something like this possible. ?

ここでマップ機能を使用できますか?はいの場合どのように?

4

3 に答える 3

7

確かにあなたは機能でそれを行うことができます。filter 組み込み関数を使用できます:

new_list = filter(lambda foo: foo.location == 2, foos)

しかし、より一般的で「pythonic」な方法は、リスト内包表記を使用することです

new_list = [foo for foo in foos if foo.location == 2]
于 2012-12-25T19:29:33.310 に答える
6

リスト内包表記はあなたが使いたいもののようです:

new_list = [foo for foo in foos if foo.location == 2]

mapリスト内のすべてのアイテム(または任意のイテレータ)に関数を適用し、結果として同じ長さのリスト(またはPython3のイテレータ)を取得する場合に適しています。条件によってはアイテムを「スキップ」することはできません。

于 2012-12-25T19:29:20.047 に答える
1

たとえば、ラムダ関数を使用してフィルターに関連付けます。

a = {'x': 1, 'location': 1}
b = {'y': 2, 'location': 2}
c = {'z': 3, 'location': 2}
d=[a,b,c]

例のように、dは次のようになります

d = [{'x': 1, 'location': 1}, {'y': 2, 'location': 2}, {'z': 3, 'location': 2}]
output = filter(lambda s:s['location']==2,d)'
print output'

結果は、

[{'y': 2, 'location': 2}, {'z': 3, 'location': 2}]

私はこれがあなたが期待するかもしれないことを願っています...

于 2013-01-02T09:21:58.980 に答える