让我们举一个例子:我有一个列表:1, 2, 3, 4, 5
我想把每个元素都加起来。如1+2, 1+3, 1+4, 1+5, 2+1, 2+3, 2+4, 2+5,
等。所以输出应该是3, 4, 5, 6, 3, 5, 6, 7
之类的。
from itertools import starmap, permutations
from operator import add
values = [1, 2, 3, 4, 5]
print(list(starmap(add, permutations(values, 2))))
输出:
[3, 4, 5, 6, 3, 5, 6, 7, 4, 5, 7, 8, 5, 6, 7, 9, 6, 7, 8, 9]
>>>
useitertools.permutations
:
from itertools import permutations
my_list = [1, 2, 3, 4, 5]
new_list = [x+y for x,y in permutations(my_list, 2)]
输出:
[3, 4, 5, 6, 3, 5, 6, 7, 4, 5, 7, 8, 5, 6, 7, 9, 6, 7, 8, 9]
你可以这样做。
def yar(int_list):
har = []
for num in int_list:
fiddly = []
for value in int_list:
add = num
add += value
fiddly.append(add)
har.append(fiddly)
return har
fee = [1, 2, 3, 4]
print(yar(fee))
# would output [[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
解决这个问题的主要方法是嵌套for
循环。对于列表中的每个数字(本例中为fee
),循环遍历列表fee
中的每个数字,并将其与外部循环中存储在add
中的值相加,然后将该值存储在列表中(即fidddly
)。
我添加了har
列表,以便用户可以访问每个迭代的组合。(1的组合索引0,2的组合索引1,等等)
你可以让它成为一个列表理解,我相信它是出于某种原因。我只是还不是最擅长解决这个问题,但这段代码仍然可以工作。
如果所有元素都不相同,则可以使用列表推导式,而不是将每个数字与除其本身以外的所有数字相加:
L = [1, 2, 3, 4, 5]
S = [ a+b for a in L for b in L if a!=b]
# [3, 4, 5, 6, 3, 5, 6, 7, 4, 5, 7, 8, 5, 6, 7, 9, 6, 7, 8, 9]
如果列表中可以有重复的数字,那么您需要根据它们的索引排除数字本身的加法:
[ a+b for i,a in enumerate(L) for j,b in enumerate(L) if i!=j]