Фильтр массива для отображения строк с определенным значением в определенном столбце - PullRequest
7 голосов
/ 14 января 2010

Допустим, у меня есть многомерный список l:

l = [['a', 1],['b', 2],['c', 3],['a', 4]]

и я хочу вернуть другой список, состоящий только из строк, в которых есть «а» в их первом элементе списка:

m = [['a', 1],['a', 4]]

Какой хороший и эффективный способ сделать это?

Ответы [ 5 ]

15 голосов
/ 14 января 2010

Определенно случай для понимания списка:

m = [row for row in l if 'a' in row[0]]

Здесь я буквально понимаю ваше «наличие» в первом элементе, откуда используется оператор in. Если вы хотите ограничить это «наличием» в качестве первого элемента (что очень отличается от того, что вы на самом деле написали!

m = [row for row in l if 'a' == row[0]]

больше похоже на это; -).

1 голос
/ 14 января 2010
m = [i for i in l if i[0] == 'a']
0 голосов
/ 14 января 2010
[i for i in l if i[0]=='a']

Кстати, взгляните на список Python с условиями .

0 голосов
/ 14 января 2010

Что не так с просто:

m = [i for i in l if i[0] == 'a']

Или:

m = filter(lambda x: x[0] == 'a', l)

Я сомневаюсь, что разница между ними будет существенной с точки зрения производительности. Используйте тот, который наиболее удобен. Мне не нравятся lambda s, но filter можно заменить на itertools.ifilter для больших списков, если это проблема, но вы также можете изменить представление списка на генератор (измените [] на ()) для достижения того же общего результата. Кроме этого, они, вероятно, идентичны.

0 голосов
/ 14 января 2010

С функцией filter :

m = filter(lambda x: x[0] == 'a', l)

или в виде списка:

m = [x for x in l where x[0] == 'a']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...