Python 元素的所有成对乘法,不包括同一元素

Python 元素的所有成对乘法,不包括同一元素,python,pandas,pairwise,Python,Pandas,Pairwise,我有一本数字字典,我想得到所有成对乘法的列表,不包括自身的乘法 test_dict = {'id_1': 8, 'id_2': 9, 'id_3': 10} test_keys = list(test_dict.keys()) list_of_multiples = [] for i in range(0, len(test_keys)): count = 0 if i == count: count += 1 else:

我有一本数字字典,我想得到所有成对乘法的列表,不包括自身的乘法

test_dict = {'id_1': 8, 'id_2': 9, 'id_3': 10}
test_keys = list(test_dict.keys())
list_of_multiples = []

for i in range(0, len(test_keys)):
    count = 0
    
    if i == count:
        count += 1
        
    else:
        if count < len(test_keys):
        
            mult = (test_dict[test_keys[i]] * test_dict[test_keys[count]])
            list_of_multiples.append(mult)
            count += 1

list_of_multiples
test_dict={'id_1':8'id_2':9'id_3':10}
test\u keys=列表(test\u dict.keys())
列出\u的倍数=[]
对于范围内的i(0,len(测试_键)):
计数=0
如果i==计数:
计数+=1
其他:
如果计数
输出:[72,80]

预期输出:[72,80,72,90,80,90]


我是一个比较新的人,所以if的逻辑很混乱。另外,如果有一个预构建的函数可以做到这一点,那也很好。非常感谢

您正在寻找的是通过使用列表理解的最惯用的python片段实现的:

keys=test_dict.keys()
如果i!=j,则为j的键中i的测试[i]*为j的键中j的测试[j]
如果您是python新手,这不一定很明显。这是一种简洁的书写方式:

keys=test_dict.keys()
列出\u的倍数=[]
对于i键:
对于j in键:
如果我j:
列出倍数。追加(test_dict[i]*test_dict[j])

使用
itertools。排列

from itertools import permutations

test_dict = {'id_1': 8, 'id_2': 9, 'id_3': 10}

perm = list(permutations(test_dict.values(), 2))
list_of_multiples = [i[0]*i[1] for i in perm]
print(list_of_multiples)
输出:

[72, 80, 72, 90, 80, 90]