Python добавляет кортеж в список на основе строкового представления - PullRequest
0 голосов
/ 10 мая 2018

поэтому у меня есть словарь строк:

data = '604452601061112210'

NewDict = {'60': ('PUSH1', 1), '61': ('PUSH2', 2), '52' : ('MSTORE', 0 ), '12' : ('ADD', 0)}

я пытаюсь просканировать строку на наличие словарных ключей, добавить, чтобы добавить ключ dict в список вместе со следующими байтами в строке, например, его следует распечатать в следующем порядке:

[PUSH1 44, MSTORE, PUSH1 10, PUSH2 1122, ADD]

однако, мой вывод:

['PUSH1 44', 'MSTORE ', 'PUSH1 10', 'PUSH2 2210']

это мой код:

i = 0
L = []

while i < len(data):
    op = data[i:i+2]

    for item in NewDict:
        if op in item:
            i += NewDict[item][1] * 2

            pep = NewDict[item][0] + ' ' + data[i:i+NewDict[item][1] * 2]
            L.append(pep)     
    else:
        i += 2

print(L)

любая помощь будет оценена, спасибо

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Проблема в том, что вы увеличиваете i на NewDict[item][1] * 2 до , вы извлекаете параметр после оператора. Вы должны сделать это после извлечения.

Вам также не нужен цикл for item in NewDict:, просто получите доступ к элементу NewDict напрямую.

while i < len(data):
    op = data[i:i+2]
    if op in NewDict:
        opname, oplen = NewDict[op]
        param = data[i+2:i+2+oplen*2]
        L.append(opname + " " + param)
        i += 2 + oplen*2
    else:
        i += 2

Даже после исправления вы не получите ADD в результате, потому что последняя операция в data это 10, а не 12.

0 голосов
/ 10 мая 2018
i = 0
L = []

while i < len(data):
    op = data[i:i+2]

    for item in NewDict:
        if op in item:
            i += NewDict[item][1] * 2

            pep = NewDict[item][0] + ' ' + data[i:i+NewDict[item][1] * 2]
            L.append(pep)     
    else:
        i += 2

print(','.join(L))

','.join(L) удаляет кавычки вокруг него. Надеюсь, это то, что вы имели в виду? Вы не можете добавить кортеж в список, потому что это разные вещи. Легко сказать, кортеж - это неизменяемый список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...