这是我的代码
mylist = [[32401, 20], [32402,30], [32939, 42], [32940, 10], [32941, 15], [40000, 123], [40100, 234]]
def collect(sublist):
current = 32400 +((mylist[0] - 32400) // 540) * 540 #atime??
flag = current + 540
temp = []
dPrices = []
if sublist[0] < flag:
temp.append(sublist[1])
else:
maxValue = max(temp)
del temp[:]
dPrices.append((current, maxValue))
print dPrices
for i in mylist:
collect(i)
然后我什么都没有(空列表)
但我想要的是[32400,42],[32940,15],[39960,234]
问题是什么?
答案 0 :(得分:0)
当你在python中定义一个函数时,你必须结束它,说明它必须返回的结果。
最后你必须写: 回来......
用变量或列表或whatelse替换你想要函数结果的点。
答案 1 :(得分:0)
if语句mylist[0]
将始终小于flag
。这是因为你在开始时所做的所有事情基本上只是说current = mylist[0]
。然后该标志为mylist[0] + 540
,其总是大于mylist[0]
。因此,您的程序永远不会进入if语句的else子句。
答案 2 :(得分:0)
以下脚本应该大致为您提供所需内容:
import bisect, operator
mylist = [[32401, 20], [32402,30], [32939, 42], [32940, 10], [32941, 15], [40000, 123], [40100, 234]]
mylist = sorted(mylist)
keys = [entry[0] for entry in mylist]
step_size = 540
block = 32400
lPrices = []
start = 0
while block <= mylist[-1][0]:
entry = bisect.bisect_left(keys, block+step_size)
if entry - start:
lPrices.append((block, max(mylist[start:entry], key=operator.itemgetter(1))[1]))
start = entry
block += step_size
print lPrices
它产生如下价格列表,给出以下输出:
[(32400, 42), (32940, 15), (39960, 234)]
首先确保您的列表按升序排列。对于每个块增量,它然后使用bisect
函数在列表中查找该块的最高条目的位置。然后计算该块中的最高值并将其添加到lPrices
列表中。然后该块被提前,直到达到mylist块范围的末尾。
在Python 2.7中测试