Почему значение в списке не пропадает?
a = list(str(input("Text: ")))
b = list(str(input("Text2: ")))
counter = 0
for i in a:
if a[counter] == b[counter]:
new_gen = list(a[counter])
counter += 1
else:
counter += 1
continue
print(new_gen)
Я думал что список в который записываются новые значения в цикле перезаписываются, тем самым накопить элементы невозможно.
Ответы (2 шт):
Всё верно, в данном случае вы перезаписываете переменную.
a = list(input("Text: "))
b = list(input("Text2: "))
counter = 0
for i in a:
if a[counter] == b[counter]:
new_gen = list(a[counter])
counter += 1
print(new_gen)
Если вы хотите чтоб переменная накапливала символы то сделайте так
a = list(input("Text: "))
b = list(input("Text2: "))
new_gen = []
counter = 0
for i in a:
if a[counter] == b[counter]:
new_gen.append(a[counter])
counter += 1
print(new_gen)
вы присваиваете переменной 1 символ
new_gen = list(a[counter])
, поэтому накопления никакого и нет
чтобы накапливать можно было бы делать так:
new_gen += list(a[counter])
или
new_gen += [a[counter]]
или
new_gen.append(a[counter])
Кстати в вашем коде очень много лишнего -
- ненужный счетчик
counter, когда можно пройтись по позиции - ненужный
continue, там и так переход в начало списка будет - дублирование
counter += 1, хотя можно было вынести за условие
Но самое главное - у вас ошибка!!!
Если первая строка будет больше второй, то возникнет ситуация, когда ко второй строке будет обращение по индексы за пределами этой строки и будет ошибка
Например код можно было бы переписать так:
вариант 1:
new_gen = []
for i in range(min(len(a), len(b))):
if a[i] == b[i]:
new_gen.append(a[i])
print(new_gen)
Если же говорить про короткие коды, то можно сделать такие варианты:
вариант 2:
new_gen = []
for obj in zip(a, b):
if obj[0] == obj[1]:
new_gen.append(obj[0])
и конечно все можно будет свернуть в 1 строку
вариант 3:
new_gen = [obj[0] for obj in zip(a, b) if obj[0] == obj[1]]