繁体   English   中英

将列表列表的某些元素添加在一起,保持其他元素不变

[英]Adding certain elements of list of lists together, keeping others intact

有一些列表形式的数据。 所以例如:

[[2.94, 0.389, 0.167, -2.75], [1.74, -0.211, -0.474, -1.37], 1.091753800499324]

我想创建一个新列表,该列表由上面列表的前两个元素组合在一起,第三个元素完好无损。 例如

   [[4.68, 0.17800000000000002, -0.30699999999999994, -4.12], 1.091753800499324] 

已经尝试了很多方法来 go 添加它们,但在不干扰列表的最后一个元素的情况下无法正确处理。

你可以这样做:

data = [[2.94, 0.389, 0.167, -2.75], [1.74, -0.211, -0.474, -1.37], 1.091753800499324]
new_data = [[sum(x) for x in zip(data[0], data[1])]] + [data[-1]]

new_data
[[4.68, 0.17800000000000002, -0.30699999999999994, -4.12], 1.091753800499324]

或者更一般地说,如果您有超过 2 个列表要求和并且总是希望将最后一个元素排除在外:

new_data = [[sum(x) for x in zip(*data[:-1])]] + [data[-1]]
new_data
[[4.68, 0.17800000000000002, -0.30699999999999994, -4.12], 1.091753800499324]

一步步:

  • 获取列表的所有元素,除了最后一个:
data[:-1]
[[2.94, 0.389, 0.167, -2.75], [1.74, -0.211, -0.474, -1.37]]
  • Zip 二乘二所有列表的所有元素:
    zip(*data[:-1])zip(data[0], data[1], data[2], ..., data[n-1])相同
    这个 function 产生如下内容:
zip(*data[:-1])
<zip at 0x1b4b93673c8>

要查看内容,您应该传递一个list

list(zip(*data[:-1]))
[(2.94, 1.74), (0.389, -0.211), (0.167, -0.474), (-2.75, -1.37)]

如您所见,元素两两配对,产生一个元组列表。

  • 现在在list comprehension中执行此操作,并对每个元组求和:
[sum(x) for x in zip(*data[:-1])]
[4.68, 0.17800000000000002, -0.30699999999999994, -4.12]
  • 将此列表与最后一个元素连接起来。 为此,最后一个元素也需要是一个列表,这就是为什么我们需要使用[data[-1]]将最后一个元素作为一个列表获取:
[[sum(x) for x in zip(*data[:-1])]] + [data[-1]]
[[4.68, 0.17800000000000002, -0.30699999999999994, -4.12], 1.091753800499324]

您可以使用 zip

output_list = []

input_list = [[2.94, 0.389, 0.167, -2.75], [1.74, -0.211, -0.474, -1.37], 1.091753800499324]
nested_list1 = input_list[0]
nested_list2 = input_list[1]

add_list = []
for element1, element2 in zip(nested_list1, nested_list2):
    add_list.append(element1 + element2)

output_list.append(add_list)
output_list.append(input_list[2])

print(output_list)
lst=[[2.94, 0.389, 0.167, -2.75], [1.74, -0.211, -0.474, -1.37], 1.091753800499324]
q=len(lst[0])
w=len(lst[1])
for i in range(max(q,w)):
    if i==q:
        for j in range(i,w):
            lst[0].append(lst[1][j])
        break
    if i==w:
        break
    lst[0][i]=lst[0][i]+lst[1][i]
del lst[1]
print(lst)
# this code should work even if first and second element is of different length

像这样?

in_data = [[2.94, 0.389, 0.167, -2.75], [1.74, -0.211, -0.474, -1.37], 1.091753800499324]

out_data = [x+y for (x,y) in zip(in_data[0], in_data[1])] + [in_data[2]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM