سؤال

لدي هذا الرمز:

chars = #some list

try:
    indx = chars.index(chars)
except ValueError:
    #doSomething
else:
   #doSomethingElse

أريد أن أكون قادرًا على القيام بذلك لأنني لا أحب التسبب في الاستثناءات عمدًا:

chars = #some list

indx = chars.index(chars)

if indx == -1:
    #doSomething
else:
   #doSomethingElse

هل هناك طريقة يمكنني من خلالها القيام بذلك؟

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

المحلول

لاحظ أن النهج الأخير يتعارض مع فلسفة "البيثونية" المقبولة عمومًا EAFP، أو "من الأسهل طلب المغفرة من الإذن"., بينما الأول يتبعه.

نصائح أخرى

if element in mylist:
    index = mylist.index(element)
    # ... do something
else:
    # ... do something else

بالنسبة للحالة المحددة التي تكون فيها قائمتك عبارة عن سلسلة من سلاسل مكونة من حرف واحد، يمكنك الحصول على ما تريد عن طريق تغيير القائمة التي سيتم البحث فيها إلى سلسلة مسبقًا (على سبيل المثال.''.الانضمام (الحرف)).

يمكنك بعد ذلك استخدام طريقة .find()، والتي تعمل كما تريد.ومع ذلك، لا توجد طريقة مقابلة للقوائم أو المجموعات.

هناك خيار آخر محتمل وهو استخدام القاموس بدلاً من ذلك.على سبيل المثال.

d = dict((x, loc) for (loc,x) in enumerate(chars))
...
index = d.get(chars_to_find, -1)  # Second argument is default if not found.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top