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

У меня есть этот пример кода, я хочу заменить каждую строку в «m» другой строкой, где строка по модулю 10 равна 0. Так, например, в моем коде я хочу новый список: m = ['0001100001000110100000011011110001101010000010000000011100000001100101', '00011100000001101111']
Гдеошибка в моем коде?

m = ['1100001000110100000011011110001101010000010000000011100000001100101', '11100000001101111']
for i in m:
        if len(i) % 10 != 0:
             i = ((10 - len(i) % 10) * "0" + i)
             m[i] = i
u = ''.join(chr(int(m[i*10:i*10+10],2)) for i in range(len(m)//10))
print("u= ", u)

1 Ответ

0 голосов
/ 10 декабря 2018

Вы должны были включить сообщение об ошибке в свой код, потому что оно должно быть достаточно очевидно из сообщения об ошибке:

>>> m[i] = i
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not str

когда вы делаете for i in m:, вы перебираете элементы m, а не индексы m.Вы, кажется, понимаете это в большинстве случаев, но я думаю, что ваша схема именования (i часто является индексом) отбросила вас.

Вы можете использовать enumerate, чтобы получить кортеж (index, value)из итерируемого:

for i, v in enumerate(m):
    if len(v) % 10 != 0:
         v = ((10 - len(v) % 10) * "0" + v)
         m[i] = v
# etc.

Если в логике вашего кода есть ошибка, она все равно может завершиться ошибкой, но это синтаксическая ошибка!

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