Python-在表中水平插入列表

时间:2018-07-17 12:33:50

标签: python list stack

我不确定如何解释这一点,但这是我当前得到的输出:

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)

很抱歉,如果不清楚,请坚持几个小时,谢谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您的问题在您发布的代码的第二行。您正在循环的每个迭代中执行codes = [],这会擦除代码列表的内容。尝试将其移到for循环上方,以免被擦除。

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

答案 1 :(得分:1)

我看到这段代码中有两个问题。

1。 第2行中的codes = []list分配了一个空codes,这就是为什么您总是在codes中以单个值结束的原因。

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

答案 2 :(得分:1)

我认为在FOR循环中初始化“代码”会导致此问题。此外,列表上的append函数将元素添加到最后,如果您想将元素添加到第一个位置,则可能要使用insert和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)
相关问题