Скажем, у меня есть многомерный список l:
l = [['a', 1],['b', 2],['c', 3],['a', 4]]
и я хочу возвратить другой список, состоящий только из строк, который имеет в их первом элементе списка:
m = [['a', 1],['a', 4]]
Что такое хороший и эффективный способ сделать это?
Определенно чехол для понимания списка:
m = [row for row in l if 'a' in row[0]]
Здесь я беру ваше "наличие в первый элемент" буквально, откуда использование в
оператор. Если вы хотите ограничить это "наличием как первый элемент" (совсем другая вещь от того, что вы на самом деле записали!-), затем
m = [row for row in l if 'a' == row[0]]
больше похож на это;-).
m = filter(lambda x: x[0] == 'a', l)
или в виде списка понимания:
m = [x for x in l where x[0] == 'a']
Что случилось только с:
m = [i for i in l if i[0] == 'a']
Или:
m = filter(lambda x: x[0] == 'a', l)
я сомневаюсь, что различие между ними будет значительно мудрый исполнением. Использовать, какой бы ни является самым удобным. Мне не нравится лямбда
с, но , фильтр
может быть заменен itertools.ifilter
для больших списков, если это - проблема, но можно также измениться, понимание списка к генератору (изменитесь []
на ()
) достигнуть того же общего результата. Кроме этого, они, вероятно, идентичны.
[i for i in l if i[0]=='a']
btw, смотрите на понимание списка Python с условиями .