📜  Python|找到差异等于 k 的所有不同对

📅  最后修改于: 2022-05-13 01:55:13.145000             🧑  作者: Mango

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)]