Массив фильтра для показа строк с определенным значением в определенном столбце

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

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

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

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

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

9
задан c00kiemonster 14 January 2010 в 05:32
поделиться

5 ответов

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

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

Здесь я беру ваше "наличие в первый элемент" буквально, откуда использование в оператор. Если вы хотите ограничить это "наличием как первый элемент" (совсем другая вещь от того, что вы на самом деле записали!-), затем

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

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

16
ответ дан 4 December 2019 в 11:42
поделиться
m = [i for i in l if i[0] == 'a']
1
ответ дан 4 December 2019 в 11:42
поделиться

с функцией функция :

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

или в виде списка понимания:

m = [x for x in l where x[0] == 'a']
1
ответ дан 4 December 2019 в 11:42
поделиться

Что случилось только с:

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

Или:

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

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

0
ответ дан 4 December 2019 в 11:42
поделиться
[i for i in l if i[0]=='a']

btw, смотрите на понимание списка Python с условиями .

0
ответ дан 4 December 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: