Список списков в 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
2 ответа

Проблема заключается в инструкции 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


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

l = []
for i in xrange(3):
 l.append([i, i+1])
print l

licensed under cc by-sa 3.0 with attribution.