Существует ли встроенная функция, которая поможет добавить новый список к существующему определенному списку в python?

#python

Вопрос:

 list = [ ["Eggs", "Milk", "Cheese"], [1, 2, 3, 4], ["A", "B" ] ]

newlist = []
appendThisList = []
for count in range(0, 13):
    appendThisList.append(count)

    if int(count) % 3 == 0:
        newlist.append(appendThisList)
        appendThisList.clear()

list.append(newlist)
print(list)
 

Выход:

 [['Eggs', 'Milk', 'Cheese'], [1, 2, 3, 4], ['A', 'B'], [[], [], [], [], []]]
 

ожидаемый:

 [['Eggs', 'Milk', 'Cheese'], [1, 2, 3, 4], ['A', 'B'], [[1,2,3], [4,5,6], [7,8,9], [1,11,12] ]
 

Комментарии:

1. Используйте appendThisList = [] вместо appendThisList.clear() .

2. Когда вы удаляете список приложений, вы вызываете список, который вы добавили в новый список, и приказываете ему стереть себя.

Ответ №1:

Проблема в следующем.

    if int(count) % 3 == 0:
        newlist.append(appendThisList)
        appendThisList.clear()
 

Правильный код должен быть:

    from copy import copy
   if int(count) % 3 == 0:
        newlist.append(copy(appendThisList))
        appendThisList.clear()
 

Пояснение: Вы всегда добавляете appendThisList в результат один и тот же экземпляр списка. И когда вы его очищаете, он очищается везде, даже после добавления.

Доказательство:

 >>> a = []
>>> b = []
>>> b.append(a)
>>> b
[[]]
>>> a.append('1')
>>> b
[['1']]
>>> a.pop()
'1'
>>> b
[[]]
>>>
 

Ответ №2:

Я заметил две ошибки.
Сначала вы должны начать свой диапазон с 1, в противном случае в ваш список будет добавлено 0.
Затем, как уже упоминалось @mrvol, вы очищаете список, который только что добавили. Однако вам не обязательно импортировать копию. Распаковка тоже подойдет:

 list = [ ["Eggs", "Milk", "Cheese"], [1, 2, 3, 4], ["A", "B" ] ]

newlist = []
appendThisList = []
for count in range(1, 13):
    appendThisList.append(count)

    if int(count) % 3 == 0:
        newlist  = [[*appendThisList]]
        appendThisList.clear()

list.append(newlist)
print(list)
 

Выход:

 [['Eggs', 'Milk', 'Cheese'], [1, 2, 3, 4], ['A', 'B'], [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]]