python - على - كتابة برنامج بلغة بايثون




كيفية الحصول على عدد العناصر في قائمة في بايثون؟ (4)

كيفية الحصول على حجم القائمة؟

للعثور على حجم القائمة ، استخدم الدالة builtin ، len :

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

و الأن:

len(items)

يعود 3.

من docs

len(s)

إرجاع الطول (عدد العناصر) من كائن. قد تكون الوسيطة عبارة عن تسلسل (مثل سلسلة أو بايت أو مجموعة حروف أو قائمة أو نطاق) أو مجموعة (مثل قاموس أو مجموعة أو مجموعة مجمدة).

يتم تنفيذ len باستخدام __len__ ، من docs نموذج البيانات:

object.__len__(self)

دعا إلى تنفيذ وظيفة المدمج في len() . يجب إرجاع طول الكائن ، عدد صحيح> = 0. أيضًا ، كائنًا لا يحدد __nonzero__() [في Python 2 أو __bool__() في Python 3] طريقة __len__() ترجع طريقة الصفر لتكون كاذبة في سياق منطقي.

ويمكننا أيضًا ملاحظة أن __len__ هي طريقة القوائم:

items.__len__()

يعود 3.

أنواع مضمن يمكنك الحصول على طول (طول)

وفي الواقع ، نرى أنه يمكننا الحصول على هذه المعلومات لجميع الأنواع الموصوفة:

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

لا تستخدم len كقيمة للحالة

لا تفعل:

if len(items): 
    ...

بدلا من ذلك ، قم بما يلي:

if items:
    ...

أشرح لماذا هنا ولكن باختصار ، هو أكثر قابلية للقراءة وأكثر أداء.

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

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

كيف يمكنني الحصول على عدد العناصر في القائمة؟


الإجابة على سؤالك كمثال تم ذكره مسبقًا:

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

print items.__len__()

وإلى جانب docs يمكنك أيضا استخدام operator.length_hint (يتطلب python 3.4+). بالنسبة إلى list العادية ، يكون كلاهما length_hint ولكن length_hint يجعل من الممكن الحصول على طول قائمة المكرر ، والتي يمكن أن تكون مفيدة في ظروف معينة:

>>> 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

لكن length_hint هو بالتعريف فقط "تلميح" ، لذلك فإن معظم الوقت يكون أفضل.

لقد رأيت عدة إجابات تشير إلى الوصول إلى __len__ . هذا على ما يرام عند التعامل مع فئات المضمنة مثل list ولكن قد يؤدي إلى مشاكل مع فئات مخصصة لأن lenlength_hint ) تنفيذ بعض length_hint الأمان. على سبيل المثال لا يسمح كلاهما بالأطوال أو الأطوال السالبة التي تتجاوز قيمة معينة (قيمة sys.maxsize ). لذلك ، من الأفضل دائمًا استخدام وظيفة len بدلاً من طريقة __len__ !


وللاستكمال ، من الممكن بدون استخدام الدالة len() (لن أتغاضى عن ذلك كخيار جيد):

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

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

(القولون في list[:] ضمني ، وبالتالي اختياري أيضًا)





list