[(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)))