كيف يمكنني معرفة ما اذا كانت القائمة فارغة ؟

StackOverflow https://stackoverflow.com/questions/53513

  •  09-06-2019
  •  | 
  •  

سؤال

على سبيل المثال ، إذا مرت التالية:

a = []

كيف يمكنني التحقق لمعرفة ما إذا كان a فارغة ؟

هل كانت مفيدة؟

المحلول

if not a:
  print("List is empty")

باستخدام الضمني booleanness الفارغة list تماما pythonic.

نصائح أخرى

على pythonic طريقة للقيام بذلك هي من بيب 8 دليل نمط (حيث نعم يعني "أوصى" ، لا يعني "لا ينصح به"):

بالنسبة متواليات ، (سلاسل, قوائم الصفوف), استخدام حقيقة أن الفارغة متواليات هي كاذبة.

نعم: if not seq:
     if seq:

No:  if len(seq):
     if not len(seq):

أنا يفضل هو صراحة:

if len(li) == 0:
    print('the list is empty')

هذه الطريقة انها 100 ٪ من الواضح أن li هو سلسلة (قائمة) ونحن نريد لاختبار حجمها.مشكلتي مع if not li: ... هو أنه يعطي انطباعا خاطئا بأن li هو متغير منطقية.

يبدو أن الناس الآخرين أن تعميم المسألة أبعد من مجرد قوائم لذا فكرت في إضافة التحذير لنوع مختلف من تسلسل أن الكثير من الناس قد تستخدم خصوصا أن هذا أول google ضرب "الثعبان اختبار مجموعة فارغة".

أساليب أخرى لا تعمل NumPy المصفوفات

عليك أن تكون حذرا مع NumPy المصفوفات ، لأن الطرق الأخرى التي تعمل بشكل جيد على lists أو غيرها من الحاويات القياسية تفشل NumPy المصفوفات.شرح لي لماذا أدناه ، ولكن باختصار ، الأسلوب المفضل هو استخدام size.

إن "pythonic" الطريقة لا تعمل:الجزء 1

إن "pythonic" وسيلة فشل مع NumPy المصفوفات لأن NumPy يحاول أن يلقي مجموعة إلى مجموعة من bools ، if x يحاول تقييم جميع تلك bools مرة للحصول على بعض نوع من إجمالي القيمة الحقيقة.ولكن هذا لا يجعل من أي معنى, حتى تحصل على ValueError:

>>> x = numpy.array([0,1])
>>> if x: print("x")
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

إن "pythonic" الطريقة لا تعمل:الجزء 2

ولكن على الأقل حالة فوق يقول لك أنه فشل.إذا كنت يحدث أن يكون NumPy مجموعة بالضبط مع عنصر واحد ، if بيان "العمل" ، بمعنى أن كنت لا تحصل على خطأ.ومع ذلك ، إذا كان هذا عنصر واحد يحدث أن تكون 0 (أو 0.0, أو False,...) ، if البيان بشكل غير صحيح يؤدي إلى False:

>>> x = numpy.array([0,])
>>> if x: print("x")
... else: print("No x")
No x

ولكن من الواضح x موجود و ليست فارغة!هذه النتيجة ليست على ما تريد.

باستخدام len يمكن أن تعطي نتائج غير متوقعة

على سبيل المثال ،

len( numpy.zeros((1,0)) )

عوائد 1, على الرغم من مجموعة لديها صفر العناصر.

على numpythonic الطريقة

كما هو موضح في SciPy التعليمات, الطريقة الصحيحة في جميع الحالات حيث كنت تعرف لديك NumPy مجموعة لاستخدام if x.size:

>>> x = numpy.array([0,1])
>>> if x.size: print("x")
x

>>> x = numpy.array([0,])
>>> if x.size: print("x")
... else: print("No x")
x

>>> x = numpy.zeros((1,0))
>>> if x.size: print("x")
... else: print("No x")
No x

إذا كنت غير متأكد ما إذا كان قد يكون list, ، NumPy مجموعة ، أو أي شيء آخر, هل يمكن الجمع بين هذا النهج مع الجواب @dubiousjim يعطي للتأكد من الاختبار المناسب لكل نوع.لا جدا "pythonic" ، ولكن اتضح أن NumPy عمدا كسر pythonicity على الأقل في هذا المعنى.

إذا كنت بحاجة إلى أن تفعل أكثر من مجرد التحقق من إذا كان الإدخال فارغ و انت تستخدم الأخرى NumPy ميزات مثل الفهرسة أو العمليات الحسابية ، ربما أكثر كفاءة (وبالتأكيد أكثر شيوعا) إلى قوة الإدخال أن يكون أ NumPy مجموعة.هناك عدد قليل من الوظائف جميلة من أجل القيام بذلك بسرعة — الأهم من ذلك numpy.asarray.هذا يأخذ المدخلات الخاصة بك, لا يفعل شيئا إذا كان صفيف ، أو يلتف المدخلات الخاصة بك إلى مجموعة إذا كانت قائمة ، tuple ، وما إلى ذلك ، واختياريا يحوله إلى اخترتها dtype.حتى انها سريعة جدا كلما كان يمكن أن يكون ، فإنه يضمن أن تحصل فقط أن نفترض الإدخال هو NumPy مجموعة.نحن عادة حتى مجرد استخدام نفس الاسم ، التحويل إلى مجموعة لا تجعل من العودة خارج الحالي نطاق:

x = numpy.asarray(x, dtype=numpy.double)

وهذا سيجعل x.size التحقق من العمل في جميع الحالات أرى في هذه الصفحة.

أفضل طريقة لمعرفة ما إذا كانت القائمة فارغة

على سبيل المثال ، إذا مرت التالية:

a = []

كيف يمكنني التحقق لمعرفة ما إذا كانت فارغة ؟

الجواب القصير:

مكان القائمة في منطقية السياق (على سبيل المثال ، if أو while البيان).فإنه سيتم اختبار False إذا كان فارغا ، True خلاف ذلك.على سبيل المثال:

if not a:                           # do this!
    print('a is an empty list')

نداء الى السلطة

بيب 8, الرسمية الثعبان دليل نمط لل كود بايثون في بيثون المكتبة القياسية, ويؤكد:

بالنسبة متواليات ، (سلاسل, قوائم الصفوف), استخدام حقيقة أن الفارغة متواليات هي كاذبة.

Yes: if not seq:
     if seq:

No: if len(seq):
    if not len(seq):

ينبغي لنا أن نتوقع أن المكتبة القياسية يجب أن يكون الكود كما performant وصحيحة بقدر الإمكان.ولكن لماذا هو أن القضية لماذا نحن بحاجة إلى هذا التوجيه ؟

تفسير

كثيرا ما نرى رمز مثل هذا من المبرمجين ذوي الخبرة الجديدة إلى الثعبان:

if len(a) == 0:                     # Don't do this!
    print('a is an empty list')

والمستخدمين من كسول اللغات قد يميل إلى القيام بذلك:

if a == []:                         # Don't do this!
    print('a is an empty list')

هذه صحيحة في كل اللغات الأخرى.و هذا حتى لغويا الصحيح في بيثون.

ولكن نرى أنه من الامم المتحدة Pythonic لأن الثعبان يدعم هذه دلالات مباشرة في القائمة كائن واجهة طريق منطقية الإكراه.

من مستندات (ونلاحظ على وجه التحديد إدراج قائمة فارغة ، []):

بشكل افتراضي, كائن يعتبر صحيحا إلا إذا فئتها يعرف إما __bool__() طريقة إرجاع False أو __len__() طريقة التي تقوم بإرجاع صفر ، عندما دعا مع الكائن.وهنا أكثر من المدمج في الكائنات تعتبر كاذبة:

  • ثوابت محددة أن تكون خاطئة: None و False.
  • صفر من أي نوع عددي: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • فارغة تسلسل مجموعات: '', (), [], {}, set(), range(0)

و عثر الوثائق:

object.__bool__(self)

ودعا إلى تنفيذ الحقيقة قيمة الاختبار المدمج في العملية bool();يجب أن تعود False أو True.عندما يكون هذا الأسلوب غير محدد ، __len__() ويسمى ، إذا تم تعريف الكائن يعتبر صحيحا إذا كانت نتيجته صفرية.إذا فئة لا يعرف __len__() ولا __bool__(), جميع الحالات تعتبر صحيحة.

و

object.__len__(self)

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

لذا بدلا من هذا:

if len(a) == 0:                     # Don't do this!
    print('a is an empty list')

أو هذا:

if a == []:                     # Don't do this!
    print('a is an empty list')

هل هذا:

if not a:
    print('a is an empty list')

تفعل ما Pythonic وعادة ما يدفع في الأداء:

هل الدفع ؟ (لاحظ أن أقل وقت لأداء ما يعادل العملية هو الأفضل:)

>>> import timeit
>>> min(timeit.repeat(lambda: len([]) == 0, repeat=100))
0.13775854044661884
>>> min(timeit.repeat(lambda: [] == [], repeat=100))
0.0984637276455409
>>> min(timeit.repeat(lambda: not [], repeat=100))
0.07878462291455435

على نطاق و ، ها هي تكلفة استدعاء الدالة و بناء و إرجاع قائمة فارغة ، والتي قد طرح من تكاليف الفراغ الشيكات المستخدمة أعلاه:

>>> min(timeit.repeat(lambda: [], repeat=100))
0.07074015751817342

ونحن نرى أن إما التحقق من طول مع مدمج وظيفة len مقارنة 0 أو فحص ضد قائمة فارغة هو كثيرا أقل performant من استخدام مدمج جملة اللغة كما هو موثق.

لماذا ؟

عن len(a) == 0 الاختيار:

أولا بيثون أن تحقق globals لمعرفة ما إذا len هو مظلل.

ثم يجب استدعاء الدالة, تحميل 0, و هل المساواة بين المقارنة في بيثون (بدلا من C):

>>> import dis
>>> dis.dis(lambda: len([]) == 0)
  1           0 LOAD_GLOBAL              0 (len)
              2 BUILD_LIST               0
              4 CALL_FUNCTION            1
              6 LOAD_CONST               1 (0)
              8 COMPARE_OP               2 (==)
             10 RETURN_VALUE

و [] == [] وقد لبناء لا لزوم لها قائمة ومن ثم, مرة أخرى, هل عملية المقارنة في بايثون الجهاز الظاهري (بدلا ج)

>>> dis.dis(lambda: [] == [])
  1           0 BUILD_LIST               0
              2 BUILD_LIST               0
              4 COMPARE_OP               2 (==)
              6 RETURN_VALUE

إن "Pythonic" الطريقة هي أبسط من ذلك بكثير وأسرع تحقق منذ طول القائمة مؤقتا في وجوه سبيل المثال الرأس:

>>> dis.dis(lambda: not [])
  1           0 BUILD_LIST               0
              2 UNARY_NOT
              4 RETURN_VALUE

الأدلة من ج المصدر والتوثيق

PyVarObject

هذا هو امتداد PyObject أن يضيف ob_size الحقل.هذا هو فقط استخدام الكائنات التي لها بعض فكرة طول.هذا النوع لا تظهر غالبا في بيثون/C API.فإنه يتوافق مع مجالات محددة من خلال التوسع في PyObject_VAR_HEAD الماكرو.

من ج المصدر في تشمل/listobject.ح:

typedef struct {
    PyObject_VAR_HEAD
    /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
    PyObject **ob_item;

    /* ob_item contains space for 'allocated' elements.  The number
     * currently in use is ob_size.
     * Invariants:
     *     0 <= ob_size <= allocated
     *     len(list) == ob_size

لقد استمتعت البحث في هذا وأقضي الكثير من الوقت مختص إجاباتي.إذا كنت تعتقد أنني ترك شيئا, واسمحوا لي أن نعرف في التعليقات.

قائمة فارغة هي في حد ذاتها تعتبر كاذبة في صحيح قيمة اختبار (انظر وثائق بايثون):

a = []
if a:
     print "not empty"

@دارين توماس

تحرير:نقطة أخرى ضد اختبار قائمة فارغة كاذبة:ماذا عن تعدد الأشكال?يجب أن لا تعتمد على قائمة كونها قائمة.يجب فقط الدجال مثل بطة - كيف أنت ذاهب للحصول على duckCollection إلى الدجال "False" عندما لا يوجد لديه العناصر ؟

الخاص بك duckCollection أن تنفذ __nonzero__ أو __len__ حتى إذا كان:سوف تعمل دون مشاكل.

باتريك (مقبولة) الإجابة هو الحق: if not a: هو الطريق الصحيح للقيام بذلك. هارلي هولكومبي الجواب صحيح أن هذا هو في بيب 8 دليل نمط.ولكن ما من أحد من الإجابات شرح هو السبب في انها فكرة جيدة لمتابعة لغة—حتى لو كنت شخصيا أجد أنه ليس واضحا بما فيه الكفاية أو مربكا روبي المستخدمين أو أيا كان.

الثعبان رمز الثعبان في المجتمع قوي جدا التعابير.في أعقاب تلك التعابير يجعل التعليمات البرمجية الخاصة بك أسهل للقراءة لأي شخص من ذوي الخبرة في بيثون.و عندما تنتهك تلك التعابير هذا إشارة قوية.

صحيح أن if not a: لا يميز فارغة قوائم من None, أو رقمية 0 ، أو فارغة الصفوف ، أو فارغة إنشاء المستخدم جمع أنواع ، أو فارغة إنشاء المستخدم ليس جمع أنواع واحدة أو عنصر NumPy مجموعة بوصفها scalars مع falsey القيم ، وما إلى ذلك.و في بعض الأحيان من المهم أن تكون واضحة حول ذلك.و في هذه الحالة, أنت تعرف ما كنت تريد أن تكون واضحة حول لذا يمكنك اختبار بالضبط.على سبيل المثال ، if not a and a is not None: يعني "أي شيء falsey إلا لا شيء" ، في حين if len(a) != 0: يعني "فقط فارغة متواليات—و أي شيء إلى جانب تسلسل خطأ هنا" ، وهلم جرا.إلى جانب اختبار بالضبط ما كنت ترغب في اختبار هذا أيضا إشارات إلى القارئ أن هذا الاختبار هو المهم.

ولكن عندما لا يكون لديك أي شيء أن يكون صريحا عن أي شيء آخر من if not a: هو تضليل القارئ.أنت الإشارات شيء مهم عندما لا يكون.(قد تكون أيضا مما يجعل رمز أقل مرونة ، أو أبطأ أو أيا كان, ولكن هذا كل شيء أقل أهمية.) وإذا كنت وكثيرا تضليل القارئ مثل هذا ، ثم عند هل الحاجة إلى التمييز ، انها سوف تمر دون أن يلاحظها أحد لأنك كنت "ذئب" في جميع أنحاء التعليمات البرمجية الخاصة بك.

ماذا تحقق ؟

يبدو أن لا أحد قد موجهة استجواب الخاص بك تحتاج لاختبار قائمة في المقام الأول.لأنك لم تقدم أي سياق إضافي يمكنني تخيل أنك قد لا تحتاج إلى أن تفعل هذا الاختيار في المقام الأول, ولكن غير مألوف مع معالجة قائمة في بيثون.

أنا أزعم أن معظم pythonic طريقة لا تحقق في كل شيء ، وإنما فقط عملية قائمة.بهذه الطريقة سوف تفعل الشيء الصحيح سواء كانت فارغة أو ممتلئة.

a = []

for item in a:
    <do something with item>

<rest of code>

هذا له فائدة من التعامل مع أي محتويات a, في حين لا تتطلب محددة تحقق الفراغ.إذا a فارغ ، تعتمد على كتلة سوف يتم تنفيذ ومترجم خلال الخريف إلى السطر التالي.

إذا كنت تفعل في الواقع تحتاج إلى التحقق من صف الفراغ إجابات أخرى كافية.

len() هو س(1) عملية بايثون قوائم, سلاسل, dicts و مجموعات.بيثون داخليا بتتبع عدد من العناصر في هذه الحاويات.

جافا سكريبت لديه فكرة مشابهة من تروثي/falsy.

كنت قد كتبت:

if isinstance(a, (list, some, other, types, i, accept)) and not a:
    do_stuff

الذي كان صوت -1.أنا لست متأكدا مما إذا كان ذلك لأن القراء اعترضوا على استراتيجية أو يعتقد أن الإجابة لم تكن مفيدة كما قدمت.سأتظاهر كان هذا الأخير منذ---ما يعتبر "pythonic"---هذا هو الاستراتيجية الصحيحة.إلا إذا كنت قد استبعد ، أو هي على استعداد للتعامل مع الحالات التي تكون فيها a ، على سبيل المثال ، False, أنت بحاجة إلى اختبار أكثر تقييدا من مجرد if not a:.هل يمكن استخدام شيء من هذا القبيل:

if isinstance(a, numpy.ndarray) and not a.size:
    do_stuff
elif isinstance(a, collections.Sized) and not a:
    do_stuff

الاختبار الأول هو استجابة @مايك الجواب أعلاه.السطر الثالث كما يمكن استبدال:

elif isinstance(a, (list, tuple)) and not a:

إذا كنت فقط تريد أن تقبل الحالات من أنواع معينة (و فرعية) ، أو مع:

elif isinstance(a, (list, tuple)) and not len(a):

يمكنك الحصول على بعيدا دون صريحة نوع الاختيار ، ولكن فقط إذا كان المحيطة سياق بالفعل يؤكد لكم أن a هو قيمة من أنواع أنت على استعداد للتعامل مع ، أو إذا كنت متأكدا من أن أنواع أنت لست على استعداد للتعامل مع تنوي رفع الأخطاء (على سبيل المثال ، TypeError إذا كنت استدعاء len على القيمة التي انها غير محددة) التي أنت على استعداد للتعامل مع.في عام ، "pythonic" الاتفاقيات يبدو أن يذهب هذا آخر الطريق.الضغط عليها مثل البطة و السماح لها رفع DuckError إذا كان لا يعرف كيف الدجال.لا يزال لديك أعتقد حول ما هو نوع من الافتراضات كنت صنع, على الرغم من ما إذا كانت الحالات أنت لست مستعدة للتعامل بشكل صحيح حقا تسير على خطأ في الأماكن الصحيحة.على Numpy المصفوفات هي مثال جيد حيث فقط عمياء الاعتماد على len أو منطقية التلبيس قد لا تفعل بالضبط ما كنت تتوقع.

من الوثائق في الحقيقة قيمة الاختبار:

كل القيم غير المذكورة هنا تعتبر True

  • None
  • False
  • صفر من أي نوع عددي ، على سبيل المثال ، 0, 0.0, 0j.
  • أي فارغة تسلسل ، على سبيل المثال ، '', (), [].
  • أي فارغة رسم الخرائط ، على سبيل المثال ، {}.
  • حالات يحددها المستخدم الطبقات ، إذا كانت فئة يعرف __bool__() أو __len__() الأسلوب عندما يكون هذا الأسلوب بإرجاع عدد صحيح من صفر أو قيمة منطقي False.

كما يمكن أن يرى, قائمة فارغة [] هو falsy, حتى تفعل ما يمكن القيام به إلى قيمة منطقية الأصوات الأكثر فعالية:

if not a:
    print('"a" is empty!')

وهنا عدد قليل من الطرق التي يمكن أن تحقق إذا كانت القائمة فارغة:

a = [] #the list

1) جميلة بسيطة pythonic الطريقة:

if not a:
    print("a is empty")

في بيثون ، الحاويات الفارغة مثل قوائم الصفوف,مجموعات,dicts والمتغيرات الخ تعتبر False.يمكن للمرء ببساطة علاج القائمة المسند (إرجاع قيمة منطقية).و True قيمة تشير إلى أنه من غير فارغة.

2) كثيرا طريقة صريحة:باستخدام len() العثور على طول و تحقق مما إذا كان يساوي 0:

if len(a) == 0:
    print("a is empty")

3) أو مقارنتها مجهول قائمة فارغة:

if a == []:
    print("a is empty")

4) آخر بعد سخيفة طريقة القيام به هو استخدام exception و iter():

try:
    next(iter(a))
    # list has elements
except StopIteration:
    print("Error: a is empty")

أنا أفضل التالية:

if a == []:
   print "The list is empty."

الأسلوب 1 (المفضل):

if not a : 
   print ("Empty") 

الطريقة 2 :

if len(a) == 0 :
   print( "Empty" )

الطريقة 3:

if a == [] :
  print ("Empty")
def list_test (L):
    if   L is None  : print 'list is None'
    elif not L      : print 'list is empty'
    else: print 'list has %d elements' % len(L)

list_test(None)
list_test([])
list_test([1,2,3])

فإنه في بعض الأحيان جيدة لاختبار None و الفراغ بشكل منفصل مثل تلك نوعان من مختلف الدول.رمز أعلاه تنتج الإخراج التالي:

list is None 
list is empty 
list has 3 elements

على الرغم من أنه لا شيء يستحق أن None هو falsy.حتى إذا كنت لا تريد فصل اختبار None-نيس, ليس عليك أن تفعل ذلك.

def list_test2 (L):
    if not L      : print 'list is empty'
    else: print 'list has %d elements' % len(L)

list_test2(None)
list_test2([])
list_test2([1,2,3])

تنتج المتوقع

list is empty
list is empty
list has 3 elements

العديد من الأجوبة التي أعطيت, و الكثير منهم جيدة جدا.أردت فقط أن أضيف أن تحقق

not a

سوف تمر أيضا على None وأنواع أخرى من هياكل فارغة.إذا كنت حقا ترغب في التحقق من قائمة فارغة ، يمكنك القيام بذلك:

if isinstance(a, list) and len(a)==0:
    print("Received an empty list")

ويجري مستوحاة من @dubiousjim الحل ، أقترح استخدام إضافية العامة التحقق من ما إذا كان هناك شيء iterable

import collections
def is_empty(a):
    return not a and isinstance(a, collections.Iterable)

ملاحظة:سلسلة يعتبر iterable.- إضافة and not isinstance(a,(str,unicode)) إذا كنت ترغب في سلسلة فارغة سيتم استبعادها

الاختبار:

>>> is_empty('sss')
False
>>> is_empty(555)
False
>>> is_empty(0)
False
>>> is_empty('')
True
>>> is_empty([3])
False
>>> is_empty([])
True
>>> is_empty({})
True
>>> is_empty(())
True

يمكنك حتى محاولة استخدام منطقي() مثل هذا

    a = [1,2,3];
    print bool(a); # it will return True
    a = [];
    print bool(a); # it will return False

أنا أحب هذه الطريقة لفحص القائمة فارغة أم لا.

مفيد جدا و مفيدة.

طريقة بسيطة هو التحقق من طول تساوي صفر.

if len(a) == 0:
    print("a is empty")
print('not empty' if a else 'empty')

قليلا أكثر عملية:

a.pop() if a else None

من python3 فصاعدا يمكنك استخدام

a == []

للتحقق إذا كانت القائمة فارغة

تحرير :هذا يعمل مع python2.7 أيضا..

أنا لست متأكدا لماذا هناك الكثير من إجابات معقدة.انها واضحة جدا ومباشرة

يمكننا استخدام بسيط إذا آخر:

list=[]
if len(list)==0:
    print ("list is empty")
else:
    print ("list is not empty")

ببساطة استخدام is_empty() أو لجعل وظيفة مثل:-

def is_empty(any_structure):
    if any_structure:
        print('Structure is not empty.')
        return True
    else:
        print('Structure is empty.')
        return False  

أنها يمكن أن تستخدم أي data_structure مثل قائمة الصفوف العربية وغيرها الكثير.هذه الكلمة عدة مرات باستخدام فقط is_empty(any_structure).

للتحقق ما إذا كانت القائمة فارغة أو لا يمكنك استخدام اثنين من الطرق التالية.ولكن تذكر, يجب علينا تجنب طريق صراحة التحقق من تسلسل أو قائمة (إنه less pythonic الطريق):

def Enquiry(list1): 
    if len(list1) == 0: 
        return 0
    else: 
        return 1

# ––––––––––––––––––––––––––––––––

list1 = [] 

if Enquiry(list1): 
    print ("The list isn't empty") 
else: 
    print("The list is Empty") 

# Result: "The list is Empty".

الطريقة الثانية هي more pythonic واحد.هذا الأسلوب هو ضمني طريقة فحص و أكثر من ذلك بكثير أفضل من سابقتها.

def Enquiry(list1): 
    if not list1: 
        return 1
    else: 
        return 0

# ––––––––––––––––––––––––––––––––

list1 = [] 

if Enquiry(list1): 
    print ("The list is Empty") 
else: 
    print ("The list isn't empty") 

# Result: "The list is Empty"

ويساعد هذا الأمل.

تحقق مما إذا كان: len(list) == 0 العوائد: True

إذا كنت تريد أن تحقق إذا كانت القائمة فارغة ،

l = []
if l:
    # do your stuff.

إذا كنت ترغب في التحقق من الطقس كل القيم في القائمة فارغة.

l = ["", False, 0, '', [], {}, ()]
if all(bool(x) for x in l):
    # do your stuff.

ومع ذلك سوف يكون هذا صحيحا بالنسبة قائمة فارغة.

def empty_list(lst):
    if len(lst) ==0:
        return false
    else:
        return all(bool(x) for x in l)

الآن يمكنك استخدام:

if empty_list(lst):
    # do your stuff.

الحقيقة قيمة فارغة القائمة False في حين أن غير فارغة قائمة True.

ماذا جلبت لي هنا هو استخدام خاص-الحالة:أردت فعلا وظيفة أن تقول لي إذا كانت القائمة فارغة أم لا.أردت أن أتجنب الكتابة بلدي وظيفة أو باستخدام لامدا-التعبير هنا (لأنه بدا وكأنه يجب أن تكون بسيطة بما فيه الكفاية):

    foo = itertools.takewhile(is_not_empty, (f(x) for x in itertools.count(1)))

و بالطبع هناك وسيلة طبيعية جدا للقيام بذلك:

    foo = itertools.takewhile(bool, (f(x) for x in itertools.count(1)))

بالطبع لا لا استخدام bool في if (أي ، if bool(L):) لأنه ضمنية.ولكن الحالات عندما "ليست فارغة" صراحة حاجة بوصفها وظيفة ، bool هو أفضل خيار.

أبله طريقة استخدام pop و try except البند (unrecommended):

a = []
try:
    a.pop()
    print('list isn\'t empty')
except:
    print('list is empty')

الإخراج:

list is empty

غير رسمي النهج :

 a = []
 try:
  print(a[-1])
 except IndexError:
  print("List is empty")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top