我正在尝试创建一个函数isPerm(P)
,如果它是一个排列,则返回True
,否则返回False
。
到目前为止,我已经:
def isPerm(P):
if len(P) == list(range(P)):
return True
else:
return False
任何帮助都会很棒。
答案 0 :(得分:6)
我能想到的最简单的方法是使用Counter
from collections import Counter
def isPerm(P, Q):
return Counter(P) == Counter(Q)
print isPerm("oolegg", "google")
<强>输出强>
True
答案 1 :(得分:3)
对于简短列表,这是一个简单的解决方案。
def is_perm(a, b):
return sorted(a) == sorted(b)
答案 2 :(得分:1)
天真的方法:对列表的克隆进行排序,然后将原始列表与已排序的克隆进行比较。如果相等,那么你有一个排列。但排序需要时间。
高效方法:创建一个字典/计数器,其项目设置为0并循环遍历列表,增加字典中的值。如果您在完成列表后得到0
或更高的值,那么您就没有排列。