2015-03-25 4 views
0

У меня вопрос о списке в python. Я использую метод append для фактического добавления значений в свой список, теперь он только заменил список новыми значениями.Python: список заменяется новым списком

Это мой код:

def init(serial): 
    serial_number = serial 
    api_call = "http://wwww.herecomesmyhyperlink/"+serial_number  
    result = [] 
    with open('allserials.csv') as csvfile: 
     reader = csv.reader(csvfile, delimiter=';', quotechar='|') 
     for row in reader: 
      if row[0].strip() == api_call: 
       result.append(row[1].strip()) 

    call_api(serial_number,result) 
    return 

def call_api(get_serial,get_result): 
    list_serial = [] 

    for i in range(len(get_result)): 
     # do an api call 
     .... 
     # get result of api call 
     list_serial.append(api_result) 

    sort_serials(list_serial) 
    return 

def sort_serials(get_list_serial) 
    sorted_list_serial = sorted(get_list_serial, reverse=True) 
    print(sorted_list_serial) 
    max_results = 10 
    length_of_sorted_list_serial = len(get_list_serial) 

    if length_of_sorted_list_serial < max_results: 
     get_first_list_element = sorted_list_serial[0] 
     get_second_element_of_that_list = get_first_list_element[1] 
     init(get_second_element_of_that_list) 
    else: 
     print("it is not smaller") 
    return 

print(init('1320739')) 

sorted_list_serial будет содержать что-то вроде: [rankingid,serial,title].

get_second_element_of_that_list: [serial]

Дело в том, что когда я запускаю мой код, я получил следующие результаты:

s: 1320739,  max result:10  length of the list:3 
s: 1523039,  max result:10  length of the list:9 

Что делает этот код является то, что вместо того, чтобы иметь список из 12 пунктов, то заменить список с 3 элементами с новым списком из 9 предметов.

Я хочу, чтобы на самом деле был новый список, содержащий 12 элементов, так что первые 3 элемента все еще находятся в списке, а 9 других элементов добавлены в исходный список.

+0

Включает ли API список? –

+0

Это дает мне ответ JSON, который я храню с другой информацией в списке. – Rotan075

ответ

1

Этот список ограничен функцией call_api(), поэтому вытащите ее или передайте ее каждой функции или создайте класс.

def init(serial): 
    serial_number = serial 

    result = [] 
    with open('allserials.csv') as csvfile: 
     result.append() 


    return result 

def call_api(get_serial,get_result): 
    # list_serial = [] 
    # 
    # Move this out 
    # Or pass it along to each function 

    for i in range(len(get_result)): 
     # do an api call 
     .... 
     # get result of api call 
     list_serial.append(api_result) 


    return list_serial 

def sort_serials(get_list_serial) 
    sorted_list_serial = sorted(get_list_serial, reverse=True) 

    max_results = 10 
    length_of_sorted_list_serial = len(get_list_serial) 

    if length_of_sorted_list_serial < max_results: 
     get_first_list_element = sorted_list_serial[0] 
     get_second_element_of_that_list = get_first_list_element[1] 

    else: 
     print("it is not smaller") 
    return {'get_second_element_of_that_list':get_second_element_of_that_list, 'sorted_serial_list':sorted_serial_list} 

Так сфера его к той же функции, и есть другие функции возвращают результаты:

def run(): 
    list_serial = [] 
    serial_number = '1320739' 
    result = init(serial_number) 
    # here the items get set 
    list_serial = call_api(serial_number,result) 
    # here they get sorted 
    serial_sorted = sort_serials(list_serial) 
    # list serial is now the sorted list 
    list_serial = serial_sorted['sorted_serial_list'] 
    get_second_element_of_that_list = serial_sorted['get_second_element_of_that_list'] 

    init(get_second_element_of_that_list) 

Или пересмотреть, как его прошло:

serial_number = '1320739' 
    init(serial_number, list_serial) 
    call_api(serial_number,result, list_serial) 
    sort_serials(list_serial) 

    init(get_second_element_of_that_list, list_serial) 

Или просто вытащить его:

. 
. 
. 
list_serial = [] 
print(init('1320739')) 

Или создать ac lass:

class SomeClassNameHere(object): 
    def __init__(self,serialnumber=None, item2=''): 
     self.serialnumber = serialnumber 
     self.item3 = item2 
     self.listserial = [] 
     self.run(item2) 

    def doOtherStuff(self): 
     # self.listserial will be updated 
     self.listserial = [1,2,3] 
     print(self.item3) 
     print(self.serialnumber) 

    def run(self,passeditem2): 
     print('Item2 has been passed: {0}'.format(passeditem2)) 
     print('listserial not updated:',self.listserial) 
     self.doOtherStuff() 
     print('listserial updated:',self.listserial) 



here = SomeClassNameHere(serialnumber='456',item2='somestring') 
print(here.serialnumber) 
print(here.item3) 
here.run() 
here.doOtherStuff() 
+0

Большое спасибо !!! Это именно то, что я искал! – Rotan075

+0

В зависимости от количества строк кода, с которыми вы работаете, может быть полезно разместить все это внутри класса. Таким образом, вы сможете заставить эти части работать, и было бы легче получить доступ к элементам. Я обновлю свой ответ одним способом. – jmunsch

+0

Я попытался добавить пример того, как класс будет выглядеть. – jmunsch

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