Доступ к значению в кортеже, который находится в списке


[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]

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

желаемый результат:

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

5 ответов:

С понимание.

[x[1] for x in L]

Игнасио-это то, что вы хотите. Однако, поскольку кто-то также изучает 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])

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

  1. объявление переменной для ссылки на пустой список.
  2. цикл for.
  3. вызов 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]
>>>