Buat Daftar Item Tunggal Diulang n Kali dengan Python
Barang yang tidak bisa diubah
Untuk item yang tidak dapat diubah, seperti None, bools, ints, float, strings, tuple, atau frozenset, Anda dapat melakukannya seperti ini:
[e] * 4
Perhatikan bahwa ini paling baik digunakan dengan item yang tidak dapat diubah (string, tuple, frozenset,) dalam daftar, karena semuanya menunjuk ke item yang sama di tempat yang sama dalam memori. Saya sering menggunakan ini ketika saya harus membangun sebuah tabel dengan skema dari semua string, sehingga saya tidak harus memberikan pemetaan yang sangat berlebihan.
schema = ['string'] * len(columns)
Barang yang bisa diubah
Saya telah menggunakan Python untuk waktu yang lama sekarang, dan saya belum pernah melihat kasus penggunaan di mana saya akan melakukan hal di atas dengan contoh yang bisa berubah. Sebagai gantinya, untuk mendapatkan, katakanlah, daftar kosong yang dapat diubah, set, atau dikte, Anda harus melakukan sesuatu seperti ini:
list_of_lists = [[] for _ in columns]
Garis bawah hanyalah nama variabel sekali pakai dalam konteks ini.
Jika Anda hanya memiliki nomornya, itu akan menjadi:
list_of_lists = [[] for _ in range(4)]
Ini _
tidak benar-benar istimewa, tetapi pemeriksa gaya lingkungan pengkodean Anda mungkin akan mengeluh jika Anda tidak bermaksud menggunakan variabel dan menggunakan nama lain.
Peringatan untuk menggunakan metode abadi dengan item yang bisa berubah:
Hati-hati melakukan ini dengan objek yang bisa berubah , ketika Anda mengubah salah satu dari mereka, mereka semua berubah karena mereka semua adalah objek yang sama :
foo = [[]] * 4
foo[0].append('x')
foo sekarang kembali:
[['x'], ['x'], ['x'], ['x']]
Tetapi dengan objek yang tidak dapat diubah, Anda dapat membuatnya bekerja karena Anda mengubah referensi, bukan objek:
>>> l = [0] * 4
>>> l[0] += 1
>>> l
[1, 0, 0, 0]
>>> l = [frozenset()] * 4
>>> l[0] |= set('abc')
>>> l
[frozenset(['a', 'c', 'b']), frozenset([]), frozenset([]), frozenset([])]
Tetapi sekali lagi, objek yang bisa berubah tidak baik untuk ini, karena operasi di tempat mengubah objek, bukan referensi:
l = [set()] * 4
>>> l[0] |= set('abc')
>>> l
[set(['a', 'c', 'b']), set(['a', 'c', 'b']), set(['a', 'c', 'b']), set(['a', 'c', 'b'])]