Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在表中水平插入列表_Python_List_Stack - Fatal编程技术网

Python-在表中水平插入列表

Python-在表中水平插入列表,python,list,stack,Python,List,Stack,我不太清楚如何解释这一点,但这是我目前得到的结果: 0x0 PUSH1 80 ['80'] 0x2 PUSH1 40 ['40'] 0x4 MSTORE [] 0x8 PUSH2 0010 ['0010'] 每次出现推送项时,我都会将最后一个项水平插入列表中,以获得堆栈的表示形式: 0x0 PUSH1 80 ['80'] 0x2 PUSH1 40 ['

我不太清楚如何解释这一点,但这是我目前得到的结果:

0x0 PUSH1       80       ['80']
0x2 PUSH1       40       ['40']
0x4 MSTORE               []
0x8 PUSH2       0010     ['0010']
每次出现推送项时,我都会将最后一个项水平插入列表中,以获得堆栈的表示形式:

0x0 PUSH1       80       ['80']
0x2 PUSH1       40       ['40', '80']
0x4 MSTORE               
0x8 PUSH2       0010     ['0010', '40', '80']
这是我当前的代码:

for (addr, op, params), y in zip(self.instructions, self.stack[::-1]):     
        codes = []
        for x in range(0, 33):
            if op == 'PUSH' + str(x):
                codes.append(params)
        print addr + "\t" + op + "\t\t" + params + "\t" + str(codes)

对不起,如果这是不清楚的,被困在这几个小时,谢谢你的帮助

您的问题在您发布的代码的第二行。您正在执行循环的每次迭代,每次迭代都会删除代码列表的内容。尝试将其移动到
for
循环上方,这样它就不会一直被擦除


此外,您的实现似乎非常低效,因为您不需要实际循环33次来检查代码,您只需使用比较即可。首先,通过执行
number=int(op[-1])
在操作结束时获取数字,然后您只需检查
if(op[0:-1]=='PUSH')和(0您的问题位于您发布的代码的第二行。您正在执行
code=[]
循环的每次迭代都会删除代码列表的内容。请尝试将其移动到
for
循环的上方,这样它就不会一直被删除


此外,您的实现似乎效率很低,因为您不需要实际循环33次来检查代码,您只需使用比较即可。首先,通过执行
number=int(op[-1])
,在操作结束时获取数字,然后您只需检查
if(op[0:-1]=“PUSH”)和(0正如我看到的,这个代码中有两个问题

一,。 第2行中的
codes=[]
codes
分配一个空的
列表,这就是为什么在
codes
中总是以一个值结束

二,。
要在列表前面插入
params
,请使用,
codes=params+codes
codes。插入(0,params)
codes[:0]=[params]

正如我看到的,此代码中有两个问题

一,。 第2行中的
codes=[]
codes
分配一个空的
列表,这就是为什么在
codes
中总是以一个值结束

二,。 要在列表前面插入
params
,请使用,
codes=params+codes
codes。插入(0,params)
codes[:0]=[params]

我想初始化“代码”FOR循环内部导致了问题。此外,列表上的append函数将在最后添加元素,如果要在第一个位置添加元素,则可能需要使用insert with position参数。您可以尝试以下操作

codes = []
for (addr, op, params), y in zip(self.instructions, self.stack[::-1]):     
        for x in range(0, 33):
            if op == 'PUSH' + str(x):
                codes.insert(0, params)
                new_codes = codes
            else:
                new_codes = []
        print addr + "\t" + op + "\t\t" + params + "\t" + str(new_codes)
我认为在FOR循环中初始化“code”是导致问题的原因。此外,列表上的append函数在最后添加元素,如果要在第一个位置添加元素,则可能需要使用insert with position参数。您可以尝试以下操作

codes = []
for (addr, op, params), y in zip(self.instructions, self.stack[::-1]):     
        for x in range(0, 33):
            if op == 'PUSH' + str(x):
                codes.insert(0, params)
                new_codes = codes
            else:
                new_codes = []
        print addr + "\t" + op + "\t\t" + params + "\t" + str(new_codes)

推到前面还是最后?你从80开始,然后推40得到40,80。然后推001,得到40,80,0010,比0010,40,80高(除此之外,你的解决方案出了什么问题?)我的错,让我纠正一下!你说的水平是什么意思?那么-你得到80,40,0010的错误是什么?不,我一点也不明白,我当前的输出是第一组数据,我想第二个例子作为我的输出推到前面还是结尾?你从80开始,然后推40得到40,80。然后按001,得到比0010,40,80高出40,800010的RTA(除此之外,您的解决方案出了什么问题?)我的错,让我来纠正它!你说的水平是什么意思?那么-是不是出了什么问题,你得到的80,40,0010 RTA比相反的顺序多?不,我一点也不明白,我当前的输出是第一组数据,我想第二个例子作为我的输出谢谢你!这已经困扰了我好几个小时了哈哈!没问题!我也只是编辑我编辑了我的帖子,给你更多的反馈,这将使你的代码更加高效。非常感谢!这已经困扰了我好几个小时了哈哈!没问题!我还编辑了我的帖子,给你更多的反馈,这将使你的代码更加高效。