مقارنة قائمة قيم البند إلى عناصر أخرى في القائمة أخرى في Python
سؤال
أريد مقارنة القيم في قائمة واحدة إلى القيم في القائمة الثانية وإرجاع جميع تلك الموجودة في القائمة الأولى ولكن ليس في 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
البيان لا معنى له. أتمنى أن يساعدك هذا.