Ini juga berfungsi:
zip(*elements)[1]
(Saya terutama memposting ini, untuk membuktikan kepada diri saya sendiri bahwa saya telah berhasil zip
...)
Lihat aksinya:
>>> help(zip)
Bantuan tentang zip fungsi built-in di modul builtin :
zip(...)
zip (seq1 [, seq2 [...]]) -> [(seq1 [0], seq2 [0] ...), (...)]
Kembalikan daftar tupel, di mana setiap tupel berisi elemen ke-i dari setiap urutan argumen. Daftar yang dikembalikan panjangnya dipotong sesuai dengan urutan argumen terpendek.
>>> elements = [(1,1,1),(2,3,7),(3,5,10)]
>>> zip(*elements)
[(1, 2, 3), (1, 3, 5), (1, 7, 10)]
>>> zip(*elements)[1]
(1, 3, 5)
>>>
Hal rapi yang saya pelajari hari ini: Gunakan *list
dalam argumen untuk membuat daftar parameter untuk suatu fungsi ...
Catatan : Dalam Python3, zip
kembalikan iterator, jadi gunakan list(zip(*elements))
untuk mengembalikan daftar tupel.
**dict
untuk membuat argumen kata kunci:def test(foo=3, bar=3): return foo*bar
lalud = {'bar': 9, 'foo'=12}; print test(**d)
Ada cara lain. Anda juga dapat melakukannya dengan map dan itemgetter :
Ini masih melakukan perulangan secara internal dan itu sedikit lebih lambat dari pemahaman daftar:
Hasil:
Jika Anda perlu mengulang daftar maka gunakan a
for
baik-baik saja.sumber
Menemukan ini ketika saya sedang mencari cara mana yang tercepat untuk menarik elemen kedua dari daftar 2-tupel. Bukan yang saya inginkan tetapi menjalankan tes yang sama seperti yang ditunjukkan dengan metode ke-3 plus menguji metode zip
Jadi lebih dari dua kali lebih cepat jika Anda memiliki 2 pasangan tupel untuk hanya dikonversi ke dikt dan mengambil nilainya.
sumber
dict(elements).values()
akan menghasilkan dikt satu elemen sebagai lawan dari komprahensi daftar atau peta. Ini persis seperti yang saya inginkan (saya tertarik dengan touple unik) (+1 dan terima kasih banyak atas posting) tetapi orang lain mungkin bertanya-tanya mengapa dict lebih cepat - ini tidak mengalokasikan memori tetapi hanya memeriksa elemen yang ada.Pengaturan waktu untuk Python 3.6 untuk mengekstraksi elemen kedua dari daftar 2-tupel.
Juga, menambahkan
numpy
metode array, yang lebih sederhana untuk dibaca (tapi bisa dibilang lebih sederhana daripada pemahaman daftar).dan pengaturan waktu:
Perhatikan bahwa
map()
danzip()
jangan mengembalikan daftar lagi, maka konversi eksplisit.sumber
sumber
Menggunakan
islice
danchain.from_iterable
:Ini dapat berguna saat Anda membutuhkan lebih dari satu elemen:
sumber