Skip to main content
 首页 » 编程设计

python之在 python 中查找对称对

2025年05月04日14zengkefu

我有以下代码可以从给定的输入中查找并打印所有对称对。

''' 
 Given a list of number pairs. 
 If pair(i,j) exist, and pair(j,i) exist report all such pairs. 
''' 
 
def find_all_symmetric_pairs(inp_dic): 
 
    for key in inp_dic: 
        val = inp_dic[key] 
 
        if inp_dic[val] == key: 
            return key,val 
    return -1,-1 
 
 
inp_dic = {'1':'3','2':'6','3':'5','7':'4','5':'3','8':'7'} 
 
print type(inp_dic) 
key,value = find_all_symmetric_pairs(inp_dic) 
 
print "key:"+str(key) 
print "value:"+str(value) 

输出:

 key:3 
 value:5 

但是如果我将输入更改为

inp_dic = {(1,3),(2,6),(3,5),(7,4),(5,3),(8,7)} 

或

inp_dic = {{1,3},{2,6},{3,5},{7,4},{5,3},{8,7}} 

我很难迭代。我如何实现相同的目标?

请您参考如下方法:

这似乎是一个有用的解决方案:

d = {'1':'3','2':'6','3':'5','7':'4','5':'3','8':'7'} 
pairs = [(key, value) for key, value in d.items()] 
answer = [(x, y) for (x, y) in pairs if (y, x) in pairs] 
print(answer) 

输出

[('3', '5'), ('5', '3')] 

如果我们将 pairs 设为 set 而不是 list 也可能会更快:

d = {'1':'3','2':'6','3':'5','7':'4','5':'3','8':'7'} 
pairs = {(key, value) for key, value in d.items()} 
answer = [(x, y) for (x, y) in pairs if (y, x) in pairs] 
print(answer) 

输出

[('3', '5'), ('5', '3')]