Python - получить список кортежей первого индекса?

Какой самый компактный способ вернуть следующее:

Учитывая список кортежей, вернуть список, состоящий из первых (или вторых, не имеет значения) элементов кортежей.

Для:

[(1,'one'),(2,'two'),(3,'three')]

возвращенный список будет

[1,2,3]

person user1413824    schedule 24.05.2012    source источник


Ответы (4)


используйте молнию, если вам нужно и то, и другое

>>> r=(1,'one'),(2,'two'),(3,'three')
>>> zip(*r)
[(1, 2, 3), ('one', 'two', 'three')]
person gsagrawal    schedule 24.05.2012
comment
@ bourbaki4481472 да в Python 3: list (zip (* r)) - person Ryan Epp; 04.02.2018

>>> mylist = [(1,'one'),(2,'two'),(3,'three')]
>>> [j for i,j in mylist]
['one', 'two', 'three']
>>> [i for i,j in mylist]
[1, 2, 3]

Для этого используется понимание списка (см. Эту ссылку). Таким образом, он перебирает элементы в mylist, по очереди устанавливая i и j для двух элементов в кортеже. Фактически это эквивалентно:

>>> newlist = []
>>> for i, j in mylist:
...     newlist.append(i)
... 
>>> newlist
[1, 2, 3]
person fraxel    schedule 24.05.2012
comment
это понимание списка - person Xavier Combelle; 24.05.2012

Попробуй это.

>>> list(map(lambda x: x[0], my_list))
person Shameem    schedule 15.08.2018

Вы тоже можете попробовать это ..

dict(my_list).keys()
person SuperNova    schedule 02.06.2016
comment
Никогда не делай этого. Потому что индекс будет изменен. - person Shameem; 15.08.2018
comment
@Shameem, пожалуйста, поясните пример. - person SuperNova; 16.08.2018
comment
Извините, я не прочитал вопрос полностью. Я имею в виду, что индекс списка вывода будет отличаться от списка ввода. Но он не имеет значения. - person Shameem; 16.08.2018