如何根据python中的positions添加嵌套列表元素

2024-04-20 05:52:58 发布

您现在位置:Python中文网/ 问答频道 /正文

输入将是:

A=['5', '5', '262.1', 0, 0.0, ['5', '5', '262.1', 0, 0.0], ['5', '5', '262.1', 0, 0.0]]

结果是:

B=['15','15','786.3','0','0.0']

目标是[x1...xN, [y1...yN], [z1...zN]]返回一个值为[x1 + y1 + z1, ..., xN + yN + zN]的列表


Tags: 目标列表x1yny1xnz1zn
2条回答

您可以按元素类型对数据进行分组:

import itertools
A=['5', '5', '262.1', 0, 0.0, ['5', '5', '262.1', 0, 0.0], ['5', '5', '262.1', 0, 0.0]]
new_a = itertools.chain.from_iterable([[list(b)] if not a else list(b) for a, b in itertools.groupby(A, key=lambda x:isinstance(x, list))])
final_result = [str(round(sum(i), 1)) for i in zip(*[map(float, i) for i in new_a])]

输出:

['15.0', '15.0', '786.3', '0.0', '0.0']

每用户评论:

# original input
A = ['5', '5', '262.1', 0, 0.0, ['5', '5', '262.1', 0, 0.0], ['5', '5', '262.1', 0, 0.0]]
# build a list of lists containing the non-list elements from 'A'
# i.e. it gets '5', '5', '262.1', 0, 0.0
N = [[float(item) for item in A if not isinstance(item, list)]]
# build a list of lists containing the list elements from 'A'
# i.e. it gets both ['5', '5', '262.1', 0, 0.0]
L = [list(map(float, item)) for item in A if isinstance(item, list)]
# at this point...
# N = [['5', '5', '262.1', 0, 0.0]]
# L = [['5', '5', '262.1', 0, 0.0], ['5', '5', '262.1', 0, 0.0]]
# N + L = [['5', '5', '262.1', 0, 0.0], ['5', '5', '262.1', 0, 0.0], ['5', '5', '262.1', 0, 0.0]]
# zip() iterates over each internal iterable simulatenously preforming 'sum()'
F = [sum(item) for item in zip(*(N + L))]

因此,内联注释可能会有所帮助,但快速细分和链接可能会对您有所帮助:

  • isinstance检查A中的元素是否是list对象(因为列表中有列表)
  • map顾名思义,它将一个函数(float)映射到A中的每个列表元素
  • list用于将结果从map()转换为list对象,该对象显示为[ ]
  • zip同时对多个iterable进行迭代,因此我们可以在迭代器上调用sum()
  • list comprehension是生成list的快速方法;这是[i for i in x]语法

相关问题 更多 >