Я так понимаю, это простой вопрос. Неужели ТАК такое элитарное место? Попробуйте погуглить вопрос, результаты не то, что мне нужно. Я усердно изучал Python и не нашел там этого. Раньше я задавал вопросы о наилучшем подходе к изучению Python, и единодушный ответ - взять базовую книгу и просто погрузиться в нее. Это меня расстраивает, так как я просто не могу найти решение ни в одной книге или онлайн-материалах, которые у меня есть так далеко? К тому же ваш комментарий действительно бесполезен и отговаривает новичков от публикации на SO.
super9
1
@Nai: Предлагаю прочитать учебник по Python: docs.python.org/tutorial/index.html . В целом документация очень хорошая. А иногда просто нужно попробовать;)
Феликс Клинг
19
Я погуглил "доступ к элементу в кортеже" с намерением получить доступ к элементу в списке кортежей. Это привело меня к вашему вопросу, так что спасибо. Я новичок в Python и не считаю ответ интуитивно понятным, но это только я!
Патрик Уильямс,
7
Я думал, что вся концепция SO заключается в том, чтобы упростить поиск ответов на ваши вопросы. Почему вопрос должен иметь определенную сложность, чтобы быть действительным? Хороший вопрос, хороший ответ.
Sceluswe
3
Гениально! Короткий, резкий, по существу ответ на короткий, резкий, по существу вопрос. Вы оба только что сделали мне день!
Eric M
82
Ответ Игнасио - это то, что вы хотите. Однако, поскольку кто-то также изучает Python, позвольте мне попытаться проанализировать его для вас ... Как уже упоминалось, это понимание списка ( например , описанное в DiveIntoPython3 ). Вот несколько моментов:
[x[1] for x in L]
Обратите внимание на []'' вокруг строки кода. Это то, что определяет список. Это говорит вам, что этот код возвращает список, поэтому он имеет 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 или любого другого ресурса по пониманию. Удачи.
В 2.x он xбудет существовать вне LC, с привязанным к нему последним значением. Это исправлено в 3.x.
Игнасио Васкес-Абрамс,
Я этого не осознавал. Спасибо за информацию.
gary
4
Замечательное объяснение @gary. Я особенно ценю ваше указание на то, что имеет в виду Л.
Патрик Уильямс
Спасибо за отзыв @PatrickWilliams. Я рад, что это помогает. Вы также можете сделать это, [x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]но это не так просто для глаз.
Гэри
5
Составление списка - абсолютно лучший способ сделать это. Другой способ, который должен быть быстрее, - это mapи itemgetter.
В ответ на комментарий о том, что OP не может найти ответ в Google, я укажу на супер-наивный способ сделать это.
new_list = []
for item in old_list:
new_list.append(item[1])
Это использует:
Объявление переменной для ссылки на пустой список.
Цикл for.
Вызов appendметода из списка.
Если кто-то пытается выучить язык и не может собрать эти базовые элементы для себя, тогда ему нужно рассматривать это как упражнение и выполнять его самостоятельно, даже если на это уходит двадцать часов.
Необходимо научиться думать о том, чего вы хотите, и сравнивать это с доступными инструментами . Каждый элемент моего второго ответа должен быть рассмотрен в базовом руководстве. Вы не можете научиться программировать, не прочитав один .
Ответ Игнасио - это то, что вы хотите. Однако, поскольку кто-то также изучает 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)))
источник