我有2个名单:
alist = ['A','B','C','D']
anotherList = ['A','C','B','D']
如果两个列表包含完全相同的元素并且长度相同,则编写一个返回True
的函数。我对这些东西有点新意,所以我得到了这个,我很确定它很糟糕,我正在努力找到一种更有效的方法。谢谢!
def smyFunction(aList,anotherList):
n = 0
for element in aList:
if element in anotherList:
n = n+1
if n == len(aList):
return True
else:
return False
答案 0 :(得分:4)
想到的两种方式是:
1)使用collections.Counter
>>> from collections import Counter
>>> Counter(alist) == Counter(anotherList)
True
2)比较排序列表
>>> sorted(alist) == sorted(anotherList)
True
答案 1 :(得分:1)
使用sorted
对列表进行排序,然后将其与==
进行比较:
>>> alist = ['A','B','C','D']
>>> anotherList = ['A','C','B','D']
>>> def smyFunction(aList,anotherList):
... return sorted(aList) == sorted(anotherList)
...
>>> smyFunction(alist, anotherList)
True
>>>
如果元素出现故障,您需要先对它们进行排序:
>>> alist = ['A','B','C','D']
>>> anotherList = ['D','A','C','B']
>>> alist == anotherList
False
>>> sorted(alist) == sorted(anotherList)
True
>>>
实际上,首先测试列表的长度然后使用sorted
可能会更好:
return len(alist) == len(anotherList) and sorted(alist) == sorted(anotherList)
这样,如果列表的长度开始不同,我们可以避免排序操作(在列表上使用len
具有O(1)
(常量)复杂度,因此它非常便宜)
答案 2 :(得分:0)
如果没有重复,请使用set
,它没有订单:
set(alist) == set(anotherList)
答案 3 :(得分:0)
尝试这样:
def check(a,b):
return sorted(a) == sorted(b)