[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Bagaimana cara mengembalikan nilai ke-2 dari setiap tupel di dalam daftar ini?
Output yang diinginkan:
[2, 3, 5, 4, 7, 7, 8]
Jawaban:
Dengan pemahaman daftar .
[x[1] for x in L]
Jawaban Ignacio adalah apa yang Anda inginkan. Namun, sebagai seseorang yang juga belajar Python, izinkan saya mencoba membedahnya untuk Anda ... Seperti yang disebutkan, itu adalah pemahaman daftar (tercakup dalam DiveIntoPython3 , misalnya). Berikut beberapa poinnya:
[x[1] for x in L]
[]
di sekitar baris kode. Inilah yang mendefinisikan daftar. Ini memberi tahu Anda bahwa kode ini mengembalikan daftar, jadi ini list
tipenya. Karenanya, teknik ini disebut "pemahaman daftar".L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
sebelum menjalankan kode di atas.x
adalah variabel yang hanya ada dalam pemahaman - coba akses di x
luar pemahaman, atau ketik type(x)
setelah menjalankan baris di atas dan itu akan memberi tahu Anda NameError: name 'x' is not defined
, sedangkan type(L)
kembali <class 'list'>
.x[1]
menunjuk ke item kedua di masing-masing tupel sedangkan x[0]
akan menunjuk ke masing-masing item pertama.Sulit untuk mengatakan seberapa banyak Anda mencoba soal sebelum mengajukan pertanyaan, tetapi mungkin Anda tidak terbiasa dengan pemahaman? Saya akan meluangkan waktu membaca Bab 3 dari DiveIntoPython , atau sumber daya apa pun tentang pemahaman. Semoga berhasil.
x
akan ada di luar LC, dengan nilai terakhir terikat padanya. Ini diperbaiki dalam 3.x.
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
tetapi tidak semudah dipandang.
Pemahaman daftar adalah cara mutlak untuk melakukan ini. Cara lain yang seharusnya lebih cepat adalah map
dan itemgetter
.
import operator
new_list = map(operator.itemgetter(1), old_list)
Menanggapi komentar bahwa OP tidak dapat menemukan jawaban di google, saya akan menunjukkan cara yang sangat naif untuk melakukannya.
new_list = []
for item in old_list:
new_list.append(item[1])
Ini menggunakan:
append
metode pada daftar.Jika seseorang mencoba mempelajari suatu bahasa dan tidak dapat mengumpulkan potongan-potongan dasar ini untuk diri mereka sendiri, maka mereka perlu melihatnya sebagai latihan dan melakukannya sendiri bahkan jika itu membutuhkan waktu dua puluh jam.
Seseorang perlu belajar bagaimana memikirkan tentang apa yang dia inginkan dan membandingkannya dengan alat yang tersedia . Setiap elemen dalam jawaban kedua saya harus tercakup dalam tutorial dasar. Anda tidak dapat belajar membuat program tanpa membacanya .
Anda juga dapat menggunakan sequence unpacking dengan 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)
Ini juga membuat tupel _
dari elemen pertama yang dibuang. Mengekstrak hanya yang kedua dimungkinkan, tetapi lebih bertele-tele:
from itertools import islice
res = next(islice(zip(*L), 1, None))
ATAU Anda dapat menggunakan 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]
>>>
Atau 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]
>>>
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))