[(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)
У відповідь на коментар, що ОП не знайшов відповіді в 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)))