在这个脚本中我使用了list comprehension和for。我需要用理解来替换循环,并在列表理解中添加这个求解。
如何添加
for i in k:
count_list.append(l.count(i))
在这个区块内
pairs = [int(pair/2) for pair in count_list if int(pair/2) != 0]
我的代码:
def sockMerchant(ar):
l = ar
k = set(l)
count_list = []
for i in k:
count_list.append(l.count(i))
pairs = [int(pair/2) for pair in count_list if int(pair/2) != 0]
return sum(pairs)
n = int(input().strip())
ar = list(map(int, input().strip().split(' ')))
result = sockMerchant(ar)
print(result)
答案 0 :(得分:3)
你根本不应该使用列表理解,也不应该使用现在的for
循环。循环效率低下;通过使用list.count()
,您将遍历每个唯一值的整个列表l
,从而创建一个O(N ^ 2)循环。
改为使用collections.Counter()
object并计入O(N)时间:
from collections import Counter
def sockMerchant(ar):
counts = Counter(ar)
return sum(count//2 for count in counts.values())
甚至
def sockMerchant(ar):
return sum(count//2 for count in Counter(ar).values())
如果你坚持一行。
请注意,sum()
并不介意这里和那里的0
个值,所以我删除了针对单个'袜子的if
测试。另外,我使用//
floor division operator而不是将除以2的浮点结果转换回整数。