Python:我有一个列表,我想把它加到列表的每个元素上



让我们举一个例子:我有一个列表: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]

最新更新