[英]In Python, I want to add a number to each element in a list, but I get [[0,1],2] instead of [0,1,2]. How to fix this?
[英]Python: I have a list and I want to add it to each element of the list
让我们举个例子:我有一个列表: 1, 2, 3, 4, 5
我想添加每个要相互添加的元素。 如1+2, 1+3, 1+4, 1+5, 2+1, 2+3, 2+4, 2+5,
等。 所以 output 应该像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))))
Output:
[3, 4, 5, 6, 3, 5, 6, 7, 4, 5, 7, 8, 5, 6, 7, 9, 6, 7, 8, 9]
>>>
使用itertools.permutations
:
from itertools import permutations
my_list = [1, 2, 3, 4, 5]
new_list = [x+y for x,y in permutations(my_list, 2)]
Output:
[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
列表,以便用户可以访问每次迭代的组合。 (索引 0 表示 1 的组合,索引 1 表示 2 的组合,等等)
您可以以某种方式使其成为列表理解,我确信出于某种原因。 我还不是最擅长弄清楚这一点,但这段代码仍然有效。
如果您的所有元素都是不同的,您可以在列表理解中执行此操作,而不是将每个数字与除自身之外的所有数字相加:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.