在python列表中追加值

时间:2015-08-04 08:16:45

标签: python

这是我的代码

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]

问题是什么?

3 个答案:

答案 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中测试