如何在python中映射两个列表进行比较

2024-03-28 21:53:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个say foos对象的列表。 我有一个创建新列表的循环。在

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

现在我想创建一个基于位置的新列表。在

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

我想知道的是,有没有什么方法可以让我做这样的事情

^{pr2}$

我可以在这里使用地图功能吗?如果是怎么回事?在


Tags: 对象inid列表newforiffoo
3条回答

List comprehension似乎是您要使用的:

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

当您想将函数应用于列表中的每个项(或任何iterable)并得到一个等长的列表(或Python3中的迭代器)时,map是很好的。它不能基于某些条件“跳过”项目。在

使用lambda函数与过滤器绑定 例如

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

根据你的例子d将是

^{pr2}$

结果应该是

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

我希望这是你所期待的。。。在

当然可以用函数来实现。您可以使用filterbuiltin function

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

但更普遍的“Python式”方法是使用list comprehensions

^{pr2}$

相关问题 更多 >