Pertanyaan Bagaimana cara mendapatkan jumlah elemen dalam daftar dengan Python?


items = []
items.append("apple")
items.append("orange")
items.append("banana")

# FAKE METHOD::
items.amount()  # Should return 3

Bagaimana cara mendapatkan jumlah elemen dalam daftar?


1530
2017-11-11 00:30


asal


Jawaban:


Itu len() fungsi dapat digunakan dengan banyak jenis di Python - baik tipe bawaan dan tipe pustaka.

>>> len([1,2,3])
3

2125
2017-11-11 00:33



Bagaimana cara mendapatkan ukuran daftar?

Untuk menemukan ukuran daftar, gunakan fungsi bawaan, len:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

Dan sekarang:

len(items)

kembali 3.

Penjelasan

Segala sesuatu di Python adalah objek, termasuk daftar. Semua objek memiliki header semacam dalam implementasi C.

Daftar dan objek bawaan lain yang serupa dengan "ukuran" dalam Python, khususnya, memiliki atribut yang disebut ob_size, di mana jumlah elemen dalam objek di-cache. Jadi memeriksa jumlah objek dalam daftar sangat cepat.

Tetapi jika Anda memeriksa apakah ukuran daftar nol atau tidak, jangan gunakan len - sebagai gantinya, masukkan daftar dalam konteks boolean - itu diperlakukan sebagai False jika kosong, True sebaliknya.

Dari dokumen

len(s)

Kembalikan panjang (jumlah item) dari suatu objek. Argumen dapat berupa urutan (seperti string, byte, tuple, daftar, atau rentang) atau   koleksi (seperti kamus, set, atau set beku).

len diimplementasikan dengan __len__, dari model data dokumen:

object.__len__(self)

Dipanggil untuk mengimplementasikan fungsi bawaan len(). Harus mengembalikan panjang objek, bilangan bulat> = 0. Juga, objek yang tidak   mendefinisikan a __nonzero__() [dengan Python 2 atau __bool__() dengan metode Python 3] dan yang mana __len__() metode mengembalikan nol   dianggap salah dalam konteks Boolean.

Dan kita juga bisa melihatnya __len__ adalah metode daftar:

items.__len__()

kembali 3.

Jenis builtin Anda bisa mendapatkan len (panjang dari

Dan sebenarnya kami melihat kami dapat memperoleh informasi ini untuk semua jenis yang dijelaskan:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

Jangan gunakan len untuk menguji daftar kosong atau non-kosong

Untuk menguji panjang tertentu, tentu saja, cukup menguji kesetaraan:

if len(items) == required_length:
    ...

Tapi ada kasus khusus untuk pengujian untuk daftar panjang nol atau kebalikannya. Dalam hal ini, jangan menguji kesetaraan.

Juga, jangan lakukan:

if len(items): 
    ...

Sebaliknya, cukup lakukan:

if items:     # Then we have some items, not empty!
    ...

atau

if not items: # Then we have an empty list!
    ...

saya jelaskan mengapa di sini tapi singkatnya, if items atau if not items lebih mudah dibaca dan lebih berkinerja.


136
2017-11-25 21:51



Meskipun ini mungkin tidak berguna karena kenyataan bahwa itu akan jauh lebih masuk akal sebagai fungsionalitas "di luar kotak", peretasan yang cukup sederhana adalah membangun kelas dengan length milik:

class slist(list):
    @property
    def length(self):
        return len(self)

Anda dapat menggunakannya seperti ini:

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Pada dasarnya, itu persis sama dengan objek daftar, dengan manfaat tambahan memiliki OOP-friendly length milik.

Seperti biasa, jarak tempuh Anda mungkin bervariasi.


64
2018-04-19 21:51



Selain len Anda juga bisa menggunakan operator.length_hint (membutuhkan python 3.4+). Untuk normal list keduanya setara tetapi length_hint memungkinkan untuk mendapatkan panjang daftar-iterator, yang dapat berguna dalam keadaan tertentu:

>>> from operator import length_hint
>>> l = ["apple", "orange", "banana"]
>>> len(l)
3
>>> length_hint(l)
3

>>> list_iterator = iter(l)
>>> len(list_iterator)
TypeError: object of type 'list_iterator' has no len()
>>> length_hint(list_iterator)
3

Tapi length_hint adalah dengan definisi hanya "petunjuk", jadi sebagian besar waktu len lebih baik.

Saya telah melihat beberapa jawaban yang menyarankan pengaksesan __len__. Ini baik-baik saja ketika berhadapan dengan kelas built-in seperti list tetapi bisa menyebabkan masalah dengan kelas khusus karena len (dan length_hint) menerapkan beberapa pemeriksaan keamanan. Misalnya keduanya tidak mengizinkan panjang atau panjang negatif yang melebihi nilai tertentu (yang sys.maxsize nilai). Jadi selalu lebih aman menggunakan len berfungsi sebagai ganti __len__ metode!


9
2018-04-07 19:03



Menjawab pertanyaan Anda sebagai contoh yang juga diberikan sebelumnya:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

print items.__len__()

6
2017-07-14 08:36



Dan untuk kelengkapan (mengambil satu untuk tim dengan downvote), itu mungkin tanpa menggunakan len() berfungsi (saya tidak akan membiarkan ini sebagai pilihan yang baik):

def count(list):
  item_count = 0
  for item in list[:]:
    item_count = item_count + 1
  return item_count

count([1,2,3,4,5])

(usus besar masuk list[:] tersirat, oleh karena itu juga opsional)


-1
2017-12-06 18:14