python البحث عن عنصر في قائمة يحتوي على سمة مساوية لبعض القيمة (التي تفي بأي شرط)


1 Answers

لأنه لم يتم ذكره للتو لاستكماله. فلتر الزيت الجيد لتصفية العناصر المراد تصفيتها.

البرمجة الوظيفية ftw.

####### Set Up #######
class X:

    def __init__(self, val):
        self.val = val

elem = 5

my_unfiltered_list = [X(1), X(2), X(3), X(4), X(5), X(5), X(6)]

####### Set Up #######

### Filter one liner ### filter(lambda x: condition(x), some_list)
my_filter_iter = filter(lambda x: x.val == elem, my_unfiltered_list)
### Returns a flippin' iterator at least in Python 3.5 and that's what I'm on

print(next(my_filter_iter).val)
print(next(my_filter_iter).val)
print(next(my_filter_iter).val)

### [1, 2, 3, 4, 5, 5, 6] Will Return: ###
# 5
# 5
# Traceback (most recent call last):
#   File "C:\Users\mousavin\workspace\Scripts\test.py", line 22, in <module>
#     print(next(my_filter_iter).value)
# StopIteration


# You can do that None stuff or whatever at this point, if you don't like exceptions.

أنا أعلم أنه يتم تفضيل عمومًا في قائمة بيانات python أو على الأقل هذا ما أقرأه ، لكنني لا أرى المشكلة صادقة. بالطبع ليست Python لغة FP ، لكن Map / Reduce / Filter قابلة للقراءة تمامًا وهي أكثر حالات الاستخدام القياسية في البرمجة الوظيفية.

لذلك تذهب هناك. تعرف برمجة وظيفتك.

قائمة شرط التصفية

لن يكون أسهل من ذلك:

next(filter(lambda x: x.val == value,  my_unfiltered_list)) # Optionally: next(..., None) or some other default value to prevent Exceptions
python django list

لدي قائمة من الأشياء. أرغب في العثور على كائن واحد (الأول أو أيا كان) في هذه القائمة لديه سمة (أو نتيجة طريقة - أيا كان) يساوي value .

ما هي أفضل طريقة للعثور عليه؟

فيما يلي حالة الاختبار:

  class Test:
      def __init__(self, value):
          self.value = value

  import random

  value = 5

  test_list = [Test(random.randint(0,100)) for x in range(1000)]

  # that I would do in Pascal, I don't believe isn't anywhere near 'Pythonic'
  for x in test_list:
      if x.value == value:
          print "i found it!"
          break

أعتقد أن استخدام المولدات reduce() لن يحدث أي فرق لأنه ما زال يتكرر من خلال القائمة.

ملاحظة: المعادلة إلى value ليست سوى مثال على ذلك. بالطبع نحن نريد الحصول على عنصر يفي بأي شرط.



Related