元素的所有成对乘法,不包括相同元素
All pairwise multiplication of elements, excluding same element
我有一本数字字典,我想得到所有成对乘法的列表,不包括与自身的乘法。
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, 80, 90]
我有一本数字字典,我想得到所有成对乘法的列表,不包括与自身的乘法。
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, 80, 90]