Могу ли я записать изменяющееся целочисленное значение в список в цикле, не перезаписывая предыдущее значение?

У меня есть цикл for с оператором if, проверяющим, равен ли текущий символ во «фразе» символу в «диктаторе [столбец]», и если да, то он добавит позицию символа в глобальный список «listY». но каждый раз, когда он пытается добавить значение «столбец» к «listY», он перезаписывает значение, которое было там ранее.

Это текущий код первой части кода, который находит X и Y символа в списке «encryptionTable»:

def findCypherP1():
    a = 0 # length of phrase to encrypt (cypher phrase)
    column = 0 # length of encryption section (shuffled alphabet)
    row = 0
    dictator = encryptionTable[0] # first row of the alphabet
    for p in range(len(phrase) * len(dictator)):
        global listY
        listY = []
        if phrase[a] == dictator[column]:
            print("Column containing cypher Y:", str(column+1))
            column2 = column
            listY.append(column2)
            a += 1; column = 0
        if a >= len(phrase):
            print(listY)
            break
        else:
            column += 1

Что происходит, когда я запускаю код, он правильно возвращает значение X символов

Column containing cypher Y: 1
Column containing cypher Y: 11
Column containing cypher Y: 12
Column containing cypher Y: 19
Column containing cypher Y: 3
[2]

Но затем, когда он добавляет «столбец» к «listY», он перезаписывает предыдущее значение. Я попытался сделать копию int «столбец», но это работает только со списками. Если бы вы могли помочь решить эту проблему, было бы здорово! Спасибо!

Непонятно, чего именно вы ожидали, но вы создаете новый список и присваиваете его глобальной переменной (у объектов нет области видимости, у переменных есть область видимости) на каждой итерации цикла, listY = [].

juanpa.arrivillaga 16.05.2024 00:32

Вы поделились функцией, но у вас нет примера значения глобальных переменных encryptionTable и phrase, к которым вы обращаетесь. Пожалуйста, поделитесь примерами или, что еще лучше, измените свою функцию, чтобы она принимала их в качестве аргументов, и покажите, как вы вызываете эту функцию.

Grismar 16.05.2024 00:33

Уберите listY = [] из цикла, если не хотите потерять старые значения.

Barmar 16.05.2024 00:33

Почему вы используете глобальную переменную? Сделайте это локальной переменной и верните ее в конце.

Barmar 16.05.2024 00:34

Это довольно просто потому, что вы повторно инициализируете listY=[] внутри своего цикла, верно? Если вы вытащите его из цикла for, он должен просто работать. Также в этом случае вам не нужна глобальная переменная?

Polarimetric 16.05.2024 00:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы захотите перенести инициализацию вашей глобальной переменной listY за пределы цикла. Если listY находится внутри цикла, он будет повторно инициализировать listY при каждой итерации цикла. Кроме того, вам может не понадобиться глобальная переменная, и в этом случае вы можете просто вернуть listY из своей функции.

def findCypherP1():
    listY = []
    a = 0 # length of phrase to encrypt (cypher phrase)
    column = 0 # length of encryption section (shuffled alphabet)
    row = 0
    dictator = encryptionTable[0] # first row of the alphabet
    for p in range(len(phrase) * len(dictator)):
        if phrase[a] == dictator[column]:
            print("Column containing cypher Y:", str(column+1))
            column2 = column
            listY.append(column2)
            a += 1; column = 0
        if a >= len(phrase):
            print(listY)
            break
        else:
            column += 1
    return listY

Я чувствую себя идиотом из-за того, что не осознаю, что инициализировал список в цикле, но спасибо!

Mwolf930 16.05.2024 21:01

На случай, если у вас возникнут проблемы с пониманием комментариев под вашим вопросом, необходимо внести изменения в код:

listY = []
def findCypherP1():
    a = 0 # length of phrase to encrypt (cypher phrase)
    column = 0 # length of encryption section (shuffled alphabet)
    row = 0
    dictator = encryptionTable[0] # first row of the alphabet
    for p in range(len(phrase) * len(dictator)):
        if phrase[a] == dictator[column]:
            print("Column containing cypher Y:", str(column+1))
            column2 = column
            listY.append(column2)
            a += 1; column = 0
        if a >= len(phrase):
            print(listY)
            break
        else:
            column += 1

Другие вопросы по теме