我有一个说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. ?
我可以在这里使用地图功能吗?如果是的话怎么样?
答案 0 :(得分:7)
当然你可以用功能做到这一点。您可以使用filter
builtin function:
new_list = filter(lambda foo: foo.location == 2, foos)
但更普遍和“pythonic”的方式是使用list comprehensions
new_list = [foo for foo in foos if foo.location == 2]
答案 1 :(得分:6)
List comprehension似乎就是您想要使用的内容:
new_list = [foo for foo in foos if foo.location == 2]
当你想将一个函数应用于列表(或任何可迭代的)中的每个项并获得相等长度的列表时 map
是好的em>(或Python3中的迭代器)作为结果。它不能根据某些条件“跳过”项目。
答案 2 :(得分:1)
你是否使用过滤器与lambda 功能绑定 例如,
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}]
我希望这可能是你期待的......