مقارنة قائمة قيم البند إلى عناصر أخرى في القائمة أخرى في Python

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

  •  19-09-2019
  •  | 
  •  

سؤال

أريد مقارنة القيم في قائمة واحدة إلى القيم في القائمة الثانية وإرجاع جميع تلك الموجودة في القائمة الأولى ولكن ليس في IE الثاني

list1 = ['one','two','three','four','five']
list2 = ['one','two','four']

سوف يعود "ثلاثة" و "خمسة".

لدي خبرة صغيرة فقط مع بيثون، لذلك قد يتحول هذا وسيلة سخيفة وغبية لمحاولة حلها، ولكن هذا ما فعلته حتى الآن:

def unusedCategories(self):
    unused = []
    for category in self.catList:
        if category != used in self.usedList:
            unused.append(category)
    return unused

ومع ذلك يلقي هذا الخطأ "التكرار على عدم التسلسل"، الذي أجمعه يعني أنه "القوائم" أو كلاهما "لا يسرد فعلا (الإخراج الخام لكليهما بنفس التنسيق مثل المثال الأول)

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

المحلول

استخدم مجموعات للحصول على الفرق بين القوائم:

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])

نصائح أخرى

set(list1).difference(set(list2))

مع set.difference:

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}

يمكنك تخطي تحويل list2 لتعيين.

يمكنك أن تفعل ذلك مع مجموعات أو فهم قائمة:

unused = [i for i in list1 if i not in list2]

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

>>> list1 = ['a','b','c']
>>> list2 = ['a','b','d']
>>> [c for c in list1 if not c in list2]
['c']
>>> set(list1).difference(set(list2))
set(['c'])
>>> L = list()
>>> for c in list1:
...     if c != L in list2:
...         L.append(c)
... 
>>> L
[]

المشكلة هي أن if البيان لا معنى له. أتمنى أن يساعدك هذا.

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