[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Как мне вернуть второе значение из каждого кортежа в этом списке?
Желаемый результат:
[2, 3, 5, 4, 7, 7, 8]
Ответы:
[x[1] for x in L]
Ответ Игнасио - это то, что вы хотите. Однако, поскольку кто-то также изучает Python, позвольте мне попытаться проанализировать его для вас ... Как уже упоминалось, это понимание списка ( например , описанное в DiveIntoPython3 ). Вот несколько моментов:
[x[1] for x in L]
[]'' вокруг строки кода. Это то, что определяет список. Это говорит вам, что этот код возвращает список, поэтому он имеет listтип. Следовательно, этот метод называется «составлением списка».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]указывает на каждый из первых элементов.Трудно сказать, сколько вы пытались решить проблему до того, как задать вопрос, но, возможно, вы просто не были знакомы с пониманием? Я бы потратил некоторое время на чтение Главы 3 DiveIntoPython или любого другого ресурса по пониманию. Удачи.
xбудет существовать вне LC, с привязанным к нему последним значением. Это исправлено в 3.x.
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]но это не так просто для глаз.
Составление списка - абсолютно лучший способ сделать это. Другой способ, который должен быть быстрее, - это mapи itemgetter.
import operator
new_list = map(operator.itemgetter(1), old_list)
В ответ на комментарий о том, что OP не может найти ответ в Google, я укажу на супер-наивный способ сделать это.
new_list = []
for item in old_list:
new_list.append(item[1])
Это использует:
appendметода из списка.Если кто-то пытается выучить язык и не может собрать эти базовые элементы для себя, тогда ему нужно рассматривать это как упражнение и выполнять его самостоятельно, даже если на это уходит двадцать часов.
Необходимо научиться думать о том, чего вы хотите, и сравнивать это с доступными инструментами . Каждый элемент моего второго ответа должен быть рассмотрен в базовом руководстве. Вы не можете научиться программировать, не прочитав один .
ИЛИ вы можете использовать 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]
>>>
Вы также можете использовать распаковку последовательности с помощью 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)
Это также создает кортеж _из отброшенных первых элементов. Возможно извлечение только второго, но более подробного:
from itertools import islice
res = next(islice(zip(*L), 1, None))
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))