如果键为空,则拆分元组,并向其上一个元组值添加对应值

2024-05-03 13:05:23 发布

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

这里我有一个元组列表,每当key为空时,我都想将对应值添加到它以前的元组值中。你知道吗

我可以用传统的方法来实现,但它看起来很难看, 有什么方法可以达到同样的效果吗?你知道吗

输入:

data= [('A', 12), ('', 1), ('B', 12), ('', 1), ('C', 12), ('', 1), ('D', 13)]

预期产量:

[13, 26, 39, 52]

我的代码:

data = [('A', 12), ('', 1), ('B', 12), ('', 1), ('C', 12), ('', 1), ('D', 13)]
init = 0 ; splitdata = []
for i in data:
    init = init+i[1]
    if i[0] == '':
        splitdata.append(init)
splitdata.append(init)
print(splitdata)
[13, 26, 39, 52]

Tags: 方法key代码in列表fordataif
3条回答

使用reduce可以执行以下操作:

from functools import reduce

data = [('A', 12), ('', 1), ('B', 12), ('', 1), ('C', 12), ('', 1), ('D', 13)]
splitdata = reduce(
    lambda res, i: res[:-1] + [res[-1] + i[1]] * (2 if i[0] == '' else 1),
    data,
    [0]
)
print(splitdata)
reduce(
        lambda lst,item: (((item[0] != '') and lst) or lst[:-1]) + [lst[-1] + item[1]],
        colLabelGrouped[1:],
        [colLabelGrouped[0][1]] )

这个减少。。。你知道吗

  • 从由colLabelGrouped中第一项的值组成的初始列表开始,然后
  • colLabelGrouped中的剩余项减少。。。
    • 将每个项目的值依次添加到列表的最后一个元素,生成。。。
      • 完整列表(如果项的键不为空)或
      • 列表减去最后一个元素(如果项的键为空)。你知道吗

下面是一个使用accumulate函数和list comprehensions的略短的方法(它可能也更可读):

colLabelGrouped = [('A', 12), ('', 1), ('B', 12), ('', 1), ('C', 12), ('', 1), ('D', 13)]

from itertools import accumulate
cumsum = list(accumulate([x[1] for x in colLabelGrouped]))
result = [cumsum[i] for i,x  in enumerate(colLabelGrouped) if x[0] == ""] 

if colLabelGrouped[-1][0] != "":
    result.append(cumsum[-1])

print(result)

相关问题 更多 >