2016-07-19 2 views
-2

В Python, я использовал, чтобы получить первый элемент списка 2-я поКак получить первый элемент сложного списка в Python

a = [[0, 1], [2, 3]] 
a[:][0] 
# [0, 2] 

Теперь, список является своим родом комплекса, способом получить первые элементы не работает

a = [['sad', 1], ['dsads', 2]] 
a[:][0] 
# ['sad', 1] 

Я не знаю, в чем разница. И как получить первые элементы такого простого способа, а не

[e[0] for e in a] 
+0

Как вы получили 'а [:] [0]' как '[0,2]'? –

+4

Этот первый фрагмент не может дать вам такого результата. –

+0

«... Раньше я получал первый элемент 2-го списка ...» Нет, вы этого не сделали. –

ответ

4

вы можете использовать встроенный zip:

заполнители элементов из каждых из итерируемых

a = [['sad', 1], ['dsads', 2]] 
zip(*a)[0] 

#results : 
('sad', 'dsads') 

Вы можете конвертировать окончательный результат в список из кортежа, если необходимо. * используется для выравнивания списка по его элементам - zip принимает итерации как позиционные аргументы. zip - это своего рода перенос матрицы.

Как уже говорилось, ваше первое решение (a[:][0]) неверно, оно просто берет первый элемент списка. Здесь вам нужно сначала преобразовать список, чтобы каждый первый элемент был сгруппирован в отдельный список и т. Д. Для вторых, третьих элементов. Затем возьмите первый элемент.

Update:

От @ комментарий Rawing в: Если список очень большой, рекомендуется использовать

next(itertools.izip(*a)) 

Это версия итератор - это принимает элемент списка только по мере необходимости. В этом случае он строит каждый элемент результата по одному за раз, так как нам нужен первый элемент, мы используем next один раз, чтобы получить следующий (таким образом, первый здесь) элемент итератора.

+2

Если список очень большой, подумайте об использовании 'next (itertools.izip (* a))'. –

+0

@Rawing является правильным. python-2.7 не использует итераторы по умолчанию, поэтому версия 'itertools' лучше. Кроме того, модуль 'six' может использоваться для обеспечения совместимости между предпочтениями python2 и python3 iterables. – frist

1

Использование NumPy:

>>> a = [['sad', 1], ['dsads', 2]] 

>>> import numpy 

>>> my_array = numpy.array(a) 

>>> print my_array[:,0] 
['sad' 'dsads']