Доступ к значению в кортеже, который находится в списке - PullRequest
76 голосов
/ 26 января 2011
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]

Как мне вернуть 2-е значение из каждого кортежа в этом списке?

Желаемый вывод:

[2, 3, 5, 4, 7, 7, 8]

Ответы [ 5 ]

90 голосов
/ 26 января 2011

С списком .

[x[1] for x in L]
70 голосов
/ 26 января 2011

Игнасио ответит то, что вы хотите. Однако, как кто-то, кто также изучает 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 или любого ресурса, посвященного пониманию. Удачи.

6 голосов
/ 26 января 2011

Понимание списка - абсолютно способ сделать это.Другой способ, которым должен быть быстрее, это 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])

Используется:

  1. Объявление переменной для ссылки на пустой список.
  2. A для цикла.
  3. Вызов метода append из списка.

Если кто-то пытается выучить язык и не может собрать эти базовые части для себя, тогда он должен рассматривайте это как упражнение и делайте это сами, даже если это займет двадцать часов.

Нужно научиться думать о том, что вы хотите и сравнить это с доступные инструменты .Каждый элемент моего второго ответа должен быть описан в базовом учебнике. Вы не можете научиться программировать, не читая .

1 голос
/ 11 сентября 2018

ИЛИ вы можете использовать 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]
>>> 
1 голос
/ 10 сентября 2018

Вы также можете использовать распаковку последовательности с помощью 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))
...