#python-3.x #list #for-loop #append
#python-3.x #Список #for #добавить
Вопрос:
Вот две части похожих кодов:
s='abc'
ans,res=[],[]
for i in range(len(s)):
ans.append(i)
res.append(ans[:])
print(res,"n")
: [[0], [0, 1], [0, 1, 2]]
ans,res=[],[]
for i in range(len(s)):
ans.append(i)
res.append(ans)
print("n",res)
: [[0, 1, 2], [0, 1, 2], [0, 1, 2]]
Меня смущает разница между этими двумя результатами. Почему res.append(ans)
и res.append(ans[:])
приводит к другому возвращаемому значению?
Может ли кто-нибудь дать мне несколько намеков или подсказать какую-нибудь основную логику, которую я проигнорировал?
Ответ №1:
s='abc'
ans,res=[],[]
for i in range(len(s)):
ans.append(i)
res.append(ans[:])
print(res,"n")
Это добавляется ans
как следующий элемент списка. Если вы увидите, как ans
это делается, и res
измените каждую итерацию, вы поймете, как это работает.
Изменения:
Iteration-0
ans- [0]
res- [[0]]
Iteration-1
ans- [0, 1]
res- [[0], [0, 1]]
Iteration-2
ans- [0, 1, 2]
res- [[0], [0, 1], [0, 1, 2]]
И для другого:
ans,res=[],[]
for i in range(len(s)):
ans.append(i)
res.append(ans)
print("n",res)
Это перезаписывает полный список на каждой итерации, например:
Iteration-0
ans- [0]
res- [[0]]
Iteration-1
ans- [0, 1]
res- [[0, 1], [0, 1]]
Iteration-2
ans- [0, 1, 2]
res- [[0, 1, 2], [0, 1, 2], [0, 1, 2]]