Skip to main content
 首页 » 编程设计

具有多个列表和 if else 条件的 Python 列表理解

2025年05月04日15duanxz

我想遍历两个同样长的集合,并确定每个集合中的元素是否也在一个数组中。

这是一个我已经解决的 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

中的重复值