我想遍历两个同样长的集合,并确定每个集合中的元素是否也在一个数组中。
这是一个我已经解决的 Hackerrank 问题。但是,我正在使用 Hackerrank 来进一步了解 Python。我一直在学习列表理解,虽然我确实相信我是如何尝试使用它来被认为是糟糕的生产代码,但我仍然想根据我自己的知识探索语言语法的可能性。
这是设置它的代码:
n, m = map(int, input().split())
arr = list(map(int, input().split()))
A = set(map(int, input().split()))
B = set(map(int, input().split()))
任务是为 A 和 arr 中的每个元素输出一个值为 +1 的整数,为 B 和 arr 中的每个元素输出一个值为 -1 的整数。
示例输入:
3 2
1 5 3
3 1
5 7
示例输出:
1
这达到了要求的结果:
print(sum([1 for a in A if a in arr]) + sum([-1 for b in B if b in arr]))
但是,这更接近我想要实现的目标:
sum([1 if a in arr else -1 if b in arr for a, b in zip(A, B)])
编辑(实际上更接近):
print(sum(1 if a in arr -1 if b in arr for a, b in zip(A, B)))
如您所见,两者都是单行代码,因此这不是要尝试减少代码,而是要了解列表理解和 Pythonic 代码的可能性。如果这是不可能的,甚至是不好的做法,我也很感兴趣。
这是 Hackerrank 链接: https://www.hackerrank.com/challenges/no-idea
请您参考如下方法:
如何转换数组来设置和取交集
s = set(arr)
print(len(A.intersection(s)) - len(B.intersection(s)))
编辑: 此解决方案不适用于 arr
