Проблема в том, что когда вы используете +=
в списке, он ожидает, что на другой стороне оператора будет список или какой-то другой тип итераций. Так что вы можете сделать это:
>>> def encode():
... result2 = []
... print result
... for x in result:
... result2 += [str(x)]
... print result2
...
>>> result = [123, 456, 789]
>>> encode()
[123, 456, 789]
['123', '456', '789']
Но когда вы сделаете это:
result2 += str(x)
Python предполагает, что вы хотели обработать результат str(x)
как итеративный, поэтому перед расширением result2
он эффективно * преобразует строку в список символов, как в следующем примере:
>>> [list(str(x)) for x in result]
[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
Как и NullUserException , быстрый способ конвертировать элементы в списке - использовать понимание списка. В этом случае просто удалите вызов list
выше.
* Точнее, он преобразует результат str(x)
в итератор (как при вызове iter()
- или, как указал eryksun, при вызове соответствующей функции C API PyObject_GetIter хотя, конечно, это относится только к cpython). Поскольку итерация по строке фактически является итерацией по отдельным символам в строке, каждый символ добавляется в список отдельно.