2014-12-12 3 views
0

Я пытаюсь распечатать список списков из цикла, но получить неправильный вывод! Повторяется последний список, добавленный в большой список.Список списков в Python -> Получение неправильного вывода

Выход я ожидал:

FINAL LIST: 
[[(1, 2), (2, 3)], 
[(2, 3), (3, 4)]] 

Выход я получаю:

FINAL LIST: 
[[(2, 3), (3, 4)], 
[(2, 3), (3, 4)]] 

Что я здесь делаю неправильно? Вот мой код:

a = [] 
count = 1 

#Function that generates some nos. for the list 
def func(): 

    del a[:] 
    for i in range(count,count+2): 
     x = i 
     y = i+1 
     a.append((x,y)) 
    print '\nIn Function:',a #List seems to be correct here 
    return a 


#List of lists 
List = [] 
for i in range(1,3): 
    b = func()    #Calling Function 
    print 'In Loop:',b  #Checking the value, list seems to be correct here also 
    List.append(b) 
    count = count+1 


print '\nList of Lists:' 
print List 
+0

Что вы думаете 'дель в [:]' делает? –

+0

del a [:] опустошает внутренний список каждый раз, когда я вызываю функцию, так что можно добавить новый набор кортежей. – HVN19

+0

Да, он просто опустошает список. Но это все тот же контейнер, каждый вызов функции модифицирует один и тот же объект. Итак, в конце 'List' содержит две ссылки на список' a'. Просто объявляйте 'a' как локальную переменную. –

ответ

1

Проблема заключается с del a[:] заявления. Остальная часть кода в порядке. вместо того, чтобы сделать это, поместите пустой a список в начале функции и проблема исчезает:

count = 1 

#Function that generates some nos. for the list 
def func(): 
    a = [] 
    for i in range(count,count+2): 
     x = i 
     y = i+1 
     a.append((x,y)) 
    print '\nIn Function:',a #List seems to be correct here 
    return a 


#List of lists 
List = [] 
count = 1 
for i in range(1,3): 
    b = func()    #Calling Function 
    print 'In Loop:',b  #Checking the value, list seems to be correct here also 
    List.append(b) 
    count = count + 1 


print '\nList of Lists:' 
print List 
1

Вы Добавляя же список (a) в List несколько раз (которые вы можете увидеть с print List[0] is List[1]). Вам нужно создать несколько списков вместо этого, как в этом примере:

l = [] 
for i in xrange(3): 
    l.append([i, i+1]) 
print l 
Смежные вопросы