没有定义索引 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 大小。或者你可以只使用字典,这样你就不必完全担心未设置的索引。
在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 大小。或者你可以只使用字典,这样你就不必完全担心未设置的索引。