python - 跟踪Python元组中值的增量和减量

标签 python arrays python-3.x list tuples

我有一个如下所示的列表,

list_ = [('a', 5), ('a', 6), ('a', 8), ('a', 2), ('a', 5), ('a', 9), ('a', 10),
             ('b', 3), ('b', 7), ('b', 6), ('b', 2), ('b', 6), ('b', 5), ('b', 10)]

我想做以下操作。 如果元组中的值增加,我必须跟踪增量,如果它减少,我必须跟踪减量,最后我需要两者的总和。

# for key 'a' for example
# increment      decrement
#       1             6
#       2
#       3
#       4
#       1
# Hence total increment is 11 and decrement is 6
# so I need the result like this. ('a', (11, 6))

我确实喜欢这样来获取增量,但不起作用。

from collections import defaultdict

d = defaultdict(list)
for k, v in list_:
    d[k].append(v)

counter1 = 0

for key, value in d.items():
  for i in range(len(value)):
    try:
      if value[i] < value[i+1]:
        s = value[i+1] - value[i]
        counter1 +=s
    except:
      pass


print(counter1)

最佳答案

def incdec(lst):
    d = {}
    for k, v in lst:
        try:
            last = d[k]
        except KeyError:
            d[k] = [0, 0, v]
        else:
            delta = v - last[2]
            last[2] = v
            last[delta < 0] += abs(delta)
    return [(k, (v[0], v[1])) for k, v in d.items()]

它适用于可迭代 lst (不收集数据,只记住增量和减量,而不是整个数据)。

d是临时列表的字典,其中 [0] 是增量,[1] 是减量 [2] 最后一个值。

last[delta < 0]是一个技巧,因为 bool有点int ,那么在这种情况下您可以寻址 [0](inc)或 [1](dec)。我知道,它的可读性不太好。您可以将其更改为 if / else .

最后一行以所需格式返回数据(增量和十进制,没有 [2] – 最后一个值)。

关于python - 跟踪Python元组中值的增量和减量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900606/

相关文章:

python-3.x - 神奇8球txt文件列表

python - DataFrame.values 中的更改是否总是会修改数据框中的值?

python - 在私有(private)网站上托管交互式 jupyter notebook

python - 无法导入 nvprof 生成的配置文件数据

python - 如何修复 WebDriverException : The browser appears to have exited before we could connect?

arrays - 字符串文字的 Ada 常量数组

python - beautifulsoup4 : placing a for loop unwrapping tags into a definition (python3)

java - 通过我的方法对数组进行排序错误Java

c - 冒泡排序在c中不能正确排序数组

python-3.x - 美汤: List all Attributes