Python|找到差异等于 k 的所有不同对
给定一个整数列表和一个正整数k ,编写一个Python程序来计算所有差异等于 k 的不同对。
例子:
Input : [1, 5, 3, 4, 2], k = 3
Output : [(5, 2), (4, 1)]
Input : [8, 12, 16, 4, 0, 20], k = 4
Output : [(8, 4), (12, 8), (16, 12), (4, 0), (20, 16)]
方法 #1: Python列表理解
我们将使用两个循环来使用列表推导,这两个循环使用 'e1' 和 'e2' 来遍历给定的列表。我们检查是否e1-e2 == k并分别返回 (e1, e2) 元组。最后,将返回一个包含所需元组的列表。
# Python3 program to Find all distinct
# pairs with difference equal to k
def findPairs(lst, k):
return [(e1, e2) for e1 in lst
for e2 in lst if (e1-e2 == k)]
# Driver code
lst = [1, 5, 3, 4, 2]
k = 3
print(findPairs(lst, k))
输出:
[(5, 2), (4, 1)]
方法#2:
相对于上述方法,这是一种有效的方法,因为它仅使用 O(n) 空间。我们采用一个空列表来存储输出。然后,我们使用带有迭代器'e'的循环来遍历给定的列表。在每次迭代中,我们检查是e+k ,即e所需的整数对是否可用。如果是,我们将元组附加到“res”。
# Python3 program to Find all distinct
# pairs with difference equal to k
def findPairs(lst, k):
res = []
for e in lst:
if e + k in lst:
res.append(tuple((e, e + k)))
return res
# Driver code
lst = [1, 5, 3, 4, 2]
k = 3
print(findPairs(lst, k))
输出:
[(1, 4), (2, 5)]
方法 #3:来自itertools
模块的combinations()
最好的方法是使用itertools模块的内置函数。 combination()在输入中 n 个元素的所有组合的元组上生成一个迭代器。我们利用这些组合并输出具有“k”差异的组合。
# Python3 program to Find all distinct
# pairs with difference equal to k
from itertools import combinations
def findPairs(lst, k):
return [(x, y) for x, y in combinations(lst, r = 2)
if abs(x - y) == k]
# Driver code
lst = [1, 5, 3, 4, 2]
k = 3
print(findPairs(lst, k))
输出:
[(1, 4), (5, 2)]