微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决元素的所有成对乘法,不包括相同元素

我有一个数字字典,我想获得所有成对乘法的列表,但不包括自身乘法。

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实现的:

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

使用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,90]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。