Есть ли способ установить индекс 1 в списке, когда индекс 0 не был определен - PullRequest
0 голосов
/ 02 апреля 2020

В Java ByteCode есть код операции под названием «istore_1», который сохраняет верхнее значение стека в индексе 1 локальных переменных, список. Я пытаюсь повторить это в python, но если вы установите индекс 1 пустого списка, он будет устанавливать индекс 0, а не индекс 1. Моя идея состояла в том, чтобы проверить, является ли первый индекс списка пустым, и если он устанавливается как «emptyindex» или что-то в этом роде, но после того, как я провел некоторое исследование, я не нашел способа проверить, является ли индекс пустым. Мой вопрос теперь заключается в том, как сохранить значение в индексе 1 списка, даже если индекс 0 не был установлен, и установить индекс 0 равным "emptyindex" в качестве заполнителя. Большое спасибо: D

local_variables = []
stack = [1]

user = input("Enter instruction")
if user == "istore_1":
  local_variables.insert(1, stack[0])
print(local_variables)

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вы можете использовать функцию для управления вашим списком:

def expand(a_list, index, value, empty=None):
    l = len(a_list)
    if index >= l:
        a_list.extend([empty]*(index + 1 - l))
    a_list[index] = value


local_variables = []

expand(local_variables, 1, 'str')

print(local_variables)

Вывод:

[None, 'str']
0 голосов
/ 02 апреля 2020

В Java байт-коде заголовки метода содержат поле, в котором указан максимальный размер таблицы локальных переменных, которую использует метод. Таким образом, вы можете просто объявить список как [None] * MAX_LOCALS. Или вы можете просто сделать [None] * 65535, так как это максимально возможный размер таблицы локальных переменных. Или вы можете просто использовать словарь, чтобы вам не пришлось беспокоиться о неустановленных индексах полностью.

...