Я думаю, что код немного запутанный, вам нужно иметь «внутренний» список, который будет постепенно заполняться, и, как только он достигнет нужного вам размера, вы просто добавляете (копия -если вы хотите повторно использовать старый «внутренний список») весь внутренний список внутри «внешнего списка».
Один из способов сделать это (создать новый внутренний список на каждой итерации, потому что это более эффективно, чем копированиестарый и повторно использующий один и тот же объект) будет:
# we define upfront how many values we want in the inner list
NUM_INNER_VALUES = 3
# the outer list needs to be created outside the main loop
outer_list = []
# we set the control right in the `while`
response = 'Y'
while response.upper() == 'Y':
# create a new `inner_list` and fill it in
inner_list = []
for i in range(NUM_INNER_VALUES):
value = input(f"Input value {i + 1}: ")
inner_list.append(value)
outer_list.append(inner_list)
# : optionally check the content of the outer list at each "row" iteration
print('Outer list is currently: ')
print(outer_list)
response = input("Do you want to continue ? (Y/N) : ")
Причина, по которой вы наблюдаете, что последний ввод повторяется, связана с тем, что вы определяете списки внецикл, и вы продолжаете использовать их память.
Это похоже на следующее:
a = [1, 2, 3]
b = a
print(a)
# [1, 2, 3]
print(b)
# [1, 2, 3]
b[0] = -1
print(a)
# [-1, 2, 3]
, как вы можете видеть, в то время как мы изменили b
, значения a
также изменилисьпотому что на самом деле a
и b
указывают на одну и ту же память.
Напротив, если вы принудительно выделите новую память для b
, этого не произойдет:
a = [1, 2, 3]
b = a.copy()
print(a)
# [1, 2, 3]
print(b)
# [1, 2, 3]
b[0] = -1
print(a)
# [1, 2, 3]
РЕДАКТИРОВАТЬ
См. @ SamStafford's answer для минимального изменения, которое заставило бы ваш код работать. Обратите внимание, что один из list1
или list2
принципиально бесполезен.