enumerate (list) удаляет элементы из списка и конвертирует его в строку / int - PullRequest
0 голосов
/ 19 сентября 2018

Этот вопрос просто из любопытства.Предположим, у меня есть список x

   x = ['a', 'b', 'c', 'd', 'e']

Когда я перечисляю этот список и делаю намеренную ошибку следующим образом:

  for i, x in enumerate(x):
      print i + " : " + x 
      #Should use str(i) and str(x)

, как и ожидалось, эта ошибка возникает:

    Traceback (most recent call last):
      File "<pyshell#26>", line 2, in <module>
        print i + " : " + x
    TypeError: unsupported operand type(s) for +: 'int' and 'str'

Однако x список преобразуется в одну буквенную строку 'a'.

  print x
  'a'

Я пробовал то же самое с числовым списком x = [1, 2, 3, 4] и x был преобразован в целое число 1.

Почему это произошло?и почему этого не произошло, когда я использую str (i) и str (x)?

1 Ответ

0 голосов
/ 19 сентября 2018

Проблема с enumerate здесь отвлекает.Реальная проблема заключается в том, что у вас есть список с именем x, а затем вы присваиваете значения в пределах списка с именем x в цикле for.

Код на самом деле не падает, пока вы не наберете:

print i + " : " + x 

Что ж, к тому времени перепривязка имени уже произошла в предыдущей строке:

for i, x in enumerate(x):

Теперь x указывает на другой объект - первый элемент в вашем списке, независимо от того, является ли он строкой или целым числом.Переименуйте ваш список или переменную цикла.

...