How to map 2 lists with comparison in python

Refresh

December 2018

Views

744 time

5

I have a list of objects of say foos. I have a loop for creating a new list.

foo1 = {id:1,location:2}
for e.g. foos = [foo1,foo2,foo3]

Now I want to create a new list based on location.

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

What I want to know is there any way in which I can do something like this

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

Can I use map function here ? if yes how ?

3 answers

6

Список понимание , кажется, что вы хотите использовать:

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

mapэто хорошо , если вы хотите применить функцию к каждому элементу в списке (или любой итерации) и получить список одинаковой длины (или итератора в Python3) в качестве результата. Она не может «пропустить» элементы , основанные на каком - то состоянии.

1

У U связаны с фильтром с лямбда - функции, например,

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}]

Я надеюсь, что это может быть у ожидать ...

7

Конечно , что вы можете сделать это с помощью функции. Вы можете использовать filter предопределённые функции :

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

Но более общий и «вещий» способ заключается в использовании списковых

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