2013-05-06 5 views
2

У меня есть один список, содержащий другие списки, и вы хотите создать новый список только из n-го элемента в других списках.Составьте список из некоторых свойств другого списка

my_list = [[1,2,3],['a','b','b'],[100,200,300]] 

new_list = make_new_list(mylist, index=2) 

new_list = [2,'b',200] 

Я знаю, как создать функцию, которая захватывает все вторые элементы, но я также знаю, что всегда существует некоторый вещий список понимание, которое делает это намного более гладко. Что такое понимание списка?

+3

В Python, написать то, что вы думаете, вероятно, будет правильно :) – Maroun

+2

В 90% индексов языков программирования начинаются с '0', а не' 1', поэтому вы должны написать 'make_new_list (mylist, index = 1)'. – Bakuriu

ответ

5

это довольно легко:

new_list = [x[1] for x in my_list] 

Обратите внимание, что в питона, индексация начинается с 0, так что второй элемент имеет индекс 1.

+4

Я чувствую, что у нас был этот ответ тысячу раз раньше, как мы делаем это более доступным для поиска? – phant0m

+0

@ phant0m: возможно, добавив ссылки на некоторые из наиболее рейтинговых ответов на список ([1] (http://stackoverflow.com/a/826430/1258806), [2] (http://stackoverflow.com/a/2656070/1258806)) и соответствующему [PEP 202] (http://www.python.org/dev/peps/pep-0202/). – fgb

0

Помимо версии с помощью списка понимание как это было предложено mgilson, вы можете также использовать operator.itemgetter:

>>> from operator import itemgetter 
>>> map(itemgetter(1), my_list) 
[2, 'b', 200] 

Некоторые сравнение времени:

>>> lis = [[1,2,3],['a','b','b'],[100,200,300]]*10**5 

>>> %timeit [x[1] for x in lis] 
10 loops, best of 3: 38.6 ms per loop 

>>> %timeit map(itemgetter(1),lis) 
10 loops, best of 3: 43.8 ms per loop 

>>> %timeit map(lambda x: x[1], lis) 
10 loops, best of 3: 82.9 ms per loop 
0

Вы можете сделать это с списковых или вы можете использовать функцию карты питона:

my_list = [[1,2,3],['a','b','b'],[100,200,300]] 
newlist = map(lambda x: x[1], my_list) 

если вы хотите функцию, которая делает это:

my_func = lambda li, index: map(lambda x: x[index], li) 
newlist = my_func(my_list, 1) 
Смежные вопросы