Возврат диапазона элементов каждого списка в списке списков - PullRequest
1 голос
/ 29 октября 2010

Из списка mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] как я могу получить новый список списков, состоящий из первых двух элементов каждого "внутреннего" списка ei newlist = [[1, 2], [4, 5], [7, 8]]?Есть ли однострочник, который может сделать это эффективно (для больших списков списков)?

Ответы [ 3 ]

7 голосов
/ 29 октября 2010

Самый простой способ - использовать понимание списка:

newlist = [sublist[:2] for sublist in mylist]
3 голосов
/ 29 октября 2010

Быстрый ответ:

first_two = [sublist[:2] for sublist in mylist]

Если список кортежей в порядке, то более быстрый ответ (по моим измерениям в 2 раза):

import operator
map(operator.itemgetter(0, 1), mylist)

Измерения:

t = timeit.Timer("[i[:2] for i in ll]", "ll = [[i, i + 1, i + 2] for i in xrange(1000)]")
t.timeit(10000)
>>> 2.2732808589935303

t2 = timeit.Timer("map(operator.itemgetter(0, 1), ll)", "import operator; ll = [[i, i + 1, i + 2] for i in xrange(1000)]")
t2.timeit(10000)
>>> 1.3041009902954102
1 голос
/ 29 октября 2010

Используйте понимание списка.

 newlist = [x[:2] for x in mylist]
...