Python中结合2个列表并返回集合的最小值/最大值的最佳方式

时间:2011-09-15 00:21:32

标签: python list tuples

我目前有两个结合“步骤”和“时间”的设置列表:

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函数?

谢谢!

2 个答案:

答案 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)

timestep进行分组,然后找到每个组的minmax。或者,您可以执行以下操作:

step.reverse()
for key, group in groupby(time, lambda _: step.pop()):
    group = tuple(group)
    print 'Step:', key, 'Min:', min(group), 'Max:', max(group)

step分组,ziptime

答案 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))