Вот проблема, которую я должен был сделать:list.append (another_list) vs list.append (another_list [:]) в python?
Мы собираемся реализовать очень полезную функцию, называемую группой.
Группапринимает список вещей и возвращает список групп, где каждая группа формируется всеми одинаковыми последовательными элементами в списке.
Например:
группа ([1, 1, 1, 2, 3, 1, 1]) == [[1, 1, 1], [2], [3], [1 , 1]]
группа ([1, 2, 1, 2, 3, 3]) == [[1], [2], [1], [2], [3, 3]]
А вот мое первоначальное решение:
def group(int_list):
group_list = []
current_list = []
for i in range(len(int_list)):
if int_list[i] not in current_list:
if len(current_list) != 0:
group_list.append(current_list)
del current_list[:]
current_list.append(int_list[i])
else:
current_list.append(int_list[i])
group_list.append(current_list)
return group_list
И выход я получаю:
[[1, 1], [1, 1], [1, 1], [1, 1]]
Пройдя 30 минут, пытаясь разобраться в проблеме, я сменил 9-ю строчку с group_list.append(current_list)
на group_list.append(current_list[:])
и на удивление магия работала. Я получил правильный вывод:
[[1, 1, 1], [2], [3], [1, 1]]
Так что я думаю, мой вопрос в чем разница между current_list
и current_list[:]
?
Другой способ исправить исходный код - изменить 'del current_list [:]' на 'current_list = []', таким образом, в следующий раз, когда вы добавите 'current_list', это будет другой список (т. Е. Не нужно сделайте мелкую копию). – gatto