Saya memiliki daftar ukuran < N dan saya ingin menambahkannya ke ukuran N dengan sebuah nilai.
Tentu saja, saya dapat menggunakan sesuatu seperti berikut ini, tetapi saya merasa ada sesuatu yang saya lewatkan:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
python
list
list-manipulation
newtover
sumber
sumber
Jawaban:
atau jika Anda tidak ingin mengubah
a
tempatnyaAnda selalu dapat membuat subkelas daftar dan memanggil metode ini sesuka Anda
sumber
Menurut saya pendekatan ini lebih visual dan pythonic.
sumber
N < len(a)
. Ini adalah kasus untuk jawaban kedua yang Anda berikan.Tidak ada fungsi bawaan untuk ini. Tapi Anda bisa membuat built-in untuk tugas Anda (atau apapun: p).
(Dimodifikasi dari itertool
padnone
dantake
resep)Pemakaian:
sumber
Jawaban gnibbler lebih bagus, tetapi jika Anda membutuhkan builtin, Anda dapat menggunakan
itertools.izip_longest
(zip_longest
di Py3k):yang akan mengembalikan daftar tupel yang
( i, list[ i ] )
diisi ke None. Jika Anda perlu menyingkirkan penghitung, lakukan sesuatu seperti:sumber
operator.itemgetter()
. JugaNone
nilai - nilai yang perlu diganti""
.Anda juga dapat menggunakan generator sederhana tanpa build in apa pun. Tetapi saya tidak akan mengisi daftar, tetapi membiarkan logika aplikasi menangani daftar kosong.
Bagaimanapun, iterator tanpa buildins
sumber
Jika Anda ingin pad dengan Tidak Ada dan bukan '', map () melakukan pekerjaan:
sumber
more-itertools
adalah pustaka yang menyertakanpadded
alat khusus untuk jenis masalah ini:Sebagai alternatif,
more_itertools
terapkan juga resep itertools Python termasukpadnone
dantake
seperti yang disebutkan oleh @kennytm, sehingga tidak harus diterapkan ulang:Jika Anda ingin mengganti
None
padding default , gunakan pemahaman daftar:sumber
Untuk keluar dari kennytm:
sumber
Anda dapat menggunakan
*
operator unpacking yang dapat diulang :keluaran:
sumber
Ini menghindari alokasi tambahan, tidak seperti solusi apa pun yang bergantung pada pembuatan dan penambahan daftar
[value] * extra_length
. Pertama-tama, metode "perluasan" memanggil__length_hint__
iterator, dan memperluas alokasil
sebanyak itu sebelum mengisinya dari iterator.sumber