使Python代码更快

时间:2017-07-05 08:49:25

标签: python python-3.x

是否可以使此代码运行得更快?

a,b=map(int,input().split())
c=list(map(int,input().split()))
d=list(map(int,input().split()))
e=list(map(int,input().split()))

happy=0

for i in c:
    if i in d:
        happy=happy+1
    elif i in e:
        happy=happy-1

print(happy)

代码必须增加或减少happy变量,具体取决于cd列表中是否存在e列表的元素。此代码适用于cde列表中的少量元素。但是当有许多元素时,代码执行会因超时而终止。

我该怎么做才能让它跑得更快?

1 个答案:

答案 0 :(得分:3)

你可以避免循环。 变量happy基本上是d中找到的元素数量与e中找到的元素数量之间的差异。

c可能有重复项吗?

如果您只想计算一次相同的元素,那么您可以使用set隐式删除重复项:

set_c = set(c)
happy_match = set_c.intersect(d)
unhappy_match = set_c.intersect(e)

happy = len(happy) - len(unhappy_match)

如果要计算每次出现(包括重复),则可以将相同的逻辑应用于列表:

happy_match = sum(1 if el in d else 0 for el in c)
unhappy_match = sum(1 if el in e else 0 for el in c)

happy = len(happy) - len(unhappy_match)