2015-08-04 2 views
-4

это мой код нижедобавляющим значения в списке питона

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]

В чем проблема?

+1

Что вы пытаетесь достичь? – ozgur

+0

Вы имеете в виду, что ничего не печатает каждый раз, когда вызывается 'collect'? Вы проверили значения 'myList [0]' и 'flag' для оператора if, если mylist [0]

+1

В этом коде есть несколько странностей, но для того, чтобы узнать, в чем проблема/ошибка, нам нужно знать, чего вы пытаетесь достичь. – skyking

ответ

0

Когда вы определяете funtion в python, вы должны закончить его, указав, что он должен вернуть в качестве результата.

В конце концов, вы должны написать: возвратного ...

заменить точки с переменной или списка или Whatelse вы хотите, результат функции будет.

0

С вашим заявлением if mylist[0] всегда будет меньше flag. Это потому, что все, что вы делаете в начале, просто говорит, что current = mylist[0]. Затем флаг равен mylist[0] + 540, который всегда будет больше mylist[0]. Таким образом, ваша программа никогда не войдет в позицию else вашего оператора if.

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

Смежные вопросы