Python在tab中水平插入列表

2024-04-26 18:59:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

0x0 PUSH1       80       ['80']
0x2 PUSH1       40       ['40']
0x4 MSTORE               []
0x8 PUSH2       0010     ['0010']

每次出现一个PUSH项时,我都会将最后一个项水平插入列表中,这样就可以得到堆栈的表示形式:

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)

很抱歉,如果这是不清楚的,被困在这几个小时,谢谢你的帮助!你知道吗


Tags: inself列表for水平paramspushcodes
3条回答

我认为在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)

在我看来,这段代码有两个问题。你知道吗

1。 ^第2行中的{}将一个空的list赋值给codes,这就是为什么总是在codes中得到一个值的原因。你知道吗

2。 要在列表前面插入params,请使用、codes = params + codescodes.insert(0,params)codes[:0] = [params]

您的问题在您发布的代码的第二行。您正在执行codes = []循环的每一次迭代,这将擦除代码列表的内容。试着把它移到for循环上面,这样它就不会一直被擦除。你知道吗

此外,您的实现似乎非常低效,因为您不需要实际循环33次来检查代码,只需使用比较即可。首先,通过执行number = int(op[-1])获得操作末尾的数字,然后您可以只检查if (op[0:-1] == 'PUSH') and (0 <= number < 33): ...

相关问题 更多 >