Apa cara terbaik untuk membuat daftar kosong baru dengan Python?
l = []
atau
l = list()
Saya menanyakan ini karena dua alasan:
- Alasan teknis, mana yang lebih cepat. (membuat kelas menyebabkan overhead?)
- Keterbacaan kode - yang mana adalah konvensi standar.
python
performance
list
coding-style
timeit
pengguna225312
sumber
sumber
Jawaban:
Inilah cara Anda menguji potongan kode mana yang lebih cepat:
Namun, dalam praktiknya, inisialisasi ini kemungkinan besar adalah bagian yang sangat kecil dari program Anda, jadi khawatir tentang hal ini mungkin salah arah.
Keterbacaan sangat subyektif. Saya lebih suka
[]
, tetapi beberapa orang yang sangat berpengetahuan, seperti Alex Martelli, lebih sukalist()
karena itu bisa diucapkan .sumber
list('')
memberi[]
bukan['']
?list('abcd')
dan Anda mengerti segalanya)list()
secara inheren lebih lambat daripada[]
, karenaada pencarian simbol (tidak ada cara bagi python untuk mengetahui sebelumnya jika Anda tidak mendefinisikan ulang daftar menjadi sesuatu yang lain!),
ada doa fungsi,
maka ia harus memeriksa apakah ada argumen iterable yang diteruskan (sehingga dapat membuat daftar dengan elemen darinya) ps. tidak ada dalam kasus kami tetapi ada "jika" periksa
Dalam kebanyakan kasus perbedaan kecepatan tidak akan membuat perbedaan praktis.
sumber
list()
lebih lambat daripada[]
!list()
ini hanya untuk memeriksa apakah ada arg sama sekali ... "periksa apakah dapat diubah" dan "buat daftar dengan elemen" tidak terjadi; mereka hanya berlaku jika ada arg. Bahkan mungkin kode C untuk[]
panggilan kode C sama denganlist()
. Dalam kasus apa pun waktu yang terlibat dalam (c) akan kecil dibandingkan dengan (a) + (b).Saya menggunakan
[]
.sumber
Saya tidak benar-benar tahu tentang itu, tetapi menurut saya, berdasarkan pengalaman, bahwa jpcgt sebenarnya benar. Contoh berikut: Jika saya menggunakan kode berikut
di penerjemah, lalu memanggil t memberi saya hanya "t" tanpa daftar apa pun, dan jika saya menambahkan sesuatu yang lain, misalnya
Saya mendapatkan kesalahan "objek 'NoneType' tidak memiliki atribut 'append'". Namun, jika saya membuat daftar dengan
maka itu berfungsi dengan baik.
sumber
t.append(1)
memodifikasit
di tempat, tidak mengembalikan apa-apa tapiNone
dan Anda menetapkan iniNone
untukt
. Jadit
merujuk sekarangNone
daripada ke daftar. Kesalahan Anda di sini adalah menulis,t=t.append(1)
bukan hanyat.append(1)
. Anda akan melihat perilaku yang samalist()
, jadi tidak ada perbedaan di sini.Hanya untuk menyoroti jawaban @Darkonaut karena saya pikir itu harus lebih terlihat.
new_list = []
ataunew_list = list()
keduanya baik-baik saja (mengabaikan kinerja), tetapiappend()
kembaliNone
, akibatnya Anda tidak dapat melakukannyanew_list = new_list.append(something
.Saya sangat bingung dengan keputusan tipe pengembalian seperti itu. Yuck.
sumber