【问题标题】:All pairwise multiplication of elements, excluding same element元素的所有成对相乘,不包括相同的元素
【发布时间】:2026-01-13 05:20:02
【问题描述】:

我有一本数字字典,我想获取所有成对乘法的列表,不包括与自身相乘。

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

输出:[72, 80]

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

我比较新,所以 if 逻辑一直很混乱。此外,如果有一个预先构建的功能可以做到这一点,那也很好。非常感谢

【问题讨论】:

    标签: python pandas pairwise


    【解决方案1】:

    您正在寻找的内容是通过使用列表推导式的最惯用的 Python 片段实现的:

    keys=test_dict.keys()
    list_of_multiples=[test_dict[i]*test_dict[j] for i in keys for j in keys if i!=j]
    

    如果您是 python 新手,这不一定很明显。这是编写以下内容的紧凑方式:

    keys=test_dict.keys()
    list_of_multiples=[]
    for i in keys:
      for j in keys:
        if i != j:
          list_of_multiples.append(test_dict[i]*test_dict[j])
    

    【讨论】:

      【解决方案2】:

      使用itertools.permutations:

      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]
      

      【讨论】:

        最近更新 更多