我目前有两个结合“步骤”和“时间”的设置列表:
step = 1,1,1,1,2,2,2,2
time = 1,2,5,6,1,3,5,6
这些值直接相关,意味着元组看起来像[(1,1),(1,2),(1,5),(1,6),(2,1),(2,3), (2,5),(2,11)]
基本上我试图找到第1步的最大值,第1步的最小值,以及第2步的最小值/最大值
minstep1 = 1
maxstep1 = 6
minstep2 = 1
maxstep2 = 11
我怎样才能在python中实现这一目标?我需要创建一个多维列表吗?是否有一个函数可以迭代元组的键值对,我可以使用zip函数?
谢谢!
答案 0 :(得分:2)
您正在寻找itertools.groupby
。以下是您的问题的一些示例代码:
step = 1,1,1,1,2,2,2,2
time = 1,2,5,6,1,3,5,6
from itertools import groupby, izip
from operator import itemgetter
for key, group in groupby(izip(step, time), itemgetter(0)):
group = [item[1] for item in group]
print 'Step:', key, 'Min:', min(group), 'Max:', max(group)
按time
对step
进行分组,然后找到每个组的min
和max
。或者,您可以执行以下操作:
step.reverse()
for key, group in groupby(time, lambda _: step.pop()):
group = tuple(group)
print 'Step:', key, 'Min:', min(group), 'Max:', max(group)
按step
分组,zip
不time
。
答案 1 :(得分:0)
这种做法怎么样?
step = [1,1,1,1,2,2,2,2]
time = [1,2,5,6,1,3,5,6]
from collections import defaultdict
dd = defaultdict(set)
for s,t in zip(step, time):
dd[s].add(t)
for k,v in dd.iteritems():
print "step %d min: %d max: %d" %(k, min(v), max(v))