没有定义索引 0 时,是否可以在列表中设置索引 1

Is there a way to set index 1 in a list when index 0 hasnt been defined

在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)

您可以使用一个函数来操作您的列表:

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']

在Java 字节码中,方法头包含一个字段,它给出了该方法使用的局部变量table 的最大大小。所以你可以预先声明一个列表,比如 [None] * MAX_LOCALS。或者您可以只执行 [None] * 65535,因为这是最大可能的局部变量 table 大小。或者你可以只使用字典,这样你就不必完全担心未设置的索引。