Доступ к значению в кортеже, который находится в списке
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Как мне вернуть 2-е значение из каждого кортежа внутри этого списка?
желаемый результат:
[2, 3, 5, 4, 7, 7, 8]
5 ответов:
Игнасио-это то, что вы хотите. Однако, поскольку кто-то также изучает Python, позвольте мне попытаться рассечь его для вас... Как уже упоминалось, это понимание списка (см. DiveIntoPython3, например). Вот несколько моментов:
[x[1] for x in L]
- обратите внимание на
[]
' s вокруг строки кода. Это то, что определяет список. Это говорит вам, что этот код возвращает список, так что этоlist
тип. Следовательно, этот метод называется " Список понимание."- L-это ваш исходный список. Поэтому вы должны определить
L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
перед выполнением вышеуказанного кода.x
- это переменная, которая существует только в понимании - попробуйте получить доступ кx
вне понимания, или типаtype(x)
после выполнения вышеуказанной строки, и он скажет вамNameError: name 'x' is not defined
, аtype(L)
возвращает<class 'list'>
.x[1]
указывает второй элемент в каждом из кортежей, тогда какx[0]
хотел бы отметить к каждому из первых пунктов.- таким образом, эта строка кода буквально читает "вернуть второй элемент в кортеже для всех кортежей в списке L."
трудно сказать, сколько вы пытались решить проблему до того, как задать вопрос, но, возможно, вы просто не были знакомы с пониманием? Я бы потратил некоторое время на чтение Глава 3 DiveIntoPython, или любой ресурс по пониманиям. Удача.
понимание списка-это абсолютно способ сделать это. Другой способ, что должны быть быстрее
map
иitemgetter
.import operator new_list = map(operator.itemgetter(1), old_list)
в ответ на комментарий, что ОП не смог найти ответ на google, я укажу супер наивный способ сделать это.
new_list = [] for item in old_list: new_list.append(item[1])
используется:
- объявление переменной для ссылки на пустой список.
- цикл for.
- вызов
append
метод на a список.если кто-то пытается выучить язык и не может собрать эти основные части для себя, то они должны рассматривать его как упражнение и делают это сами, даже если это займет двадцать часов.
нужно научиться думай о том, чего хочешь и сравните это с доступные инструменты. Каждый элемент в моем втором ответе должен быть рассмотрен в базовом учебнике. вы не можете научиться программировать не читая ни одного.
вы также можете использовать последовательность распаковки с
zip
:L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)] _, res = zip(*L) print(res) # (2, 3, 5, 4, 7, 7, 8)
Это также создает кортежа!--3--> из отброшенных первых элементов. Извлечение только второго возможно, но более подробно:
from itertools import islice res = next(islice(zip(*L), 1, None))
или вы можете использовать
pandas
:>>> import pandas as pd >>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)] >>> df=pd.DataFrame(L) >>> df[1] 0 2 1 3 2 5 3 4 4 7 5 7 6 8 Name: 1, dtype: int64 >>> df[1].tolist() [2, 3, 5, 4, 7, 7, 8] >>>
или
numpy
:>>> import numpy as np >>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)] >>> arr=np.array(L) >>> arr.T[1] array([2, 3, 5, 4, 7, 7, 8]) >>> arr.T[1].tolist() [2, 3, 5, 4, 7, 7, 8] >>>