出于某种原因,当我做代码时......
def encode():
result2 = []
print result
for x in result:
result2 += str(x)
print result2
我明白了......
[123, 456, 789]
['1', '2', '3', '4', '5', '6', '7', '8', '9']
如何让它返回['123', '456', '789']
?
谢谢!
答案 0 :(得分:10)
怎么样:
result2 = [str(x) for x in result]
你得到的结果是+=
正在进行列表连接。由于str(123)
是'123'
,可以看作是['1', '2', '3']
,当您将其连接到空列表时,您会得到['1', '2', '3']
(其他值也是如此)。
要按照自己的方式行事,你需要:
result2.append(str(x)) # instead of result2 += str(x)
答案 1 :(得分:2)
问题在于,当您在列表中使用+=
时,它期望运算符另一侧的事物是列表或其他类型的可迭代事物。所以你可以这样做:
>>> 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函数{{3虽然当然只适用于cpython)。由于对字符串的迭代实际上是对字符串中各个字符的迭代,因此每个字符都会单独添加到列表中。
答案 2 :(得分:1)
功能方法是使用list(map(str, lst))
:
lst = [123, 456, 789]
res = list(map(str, lst))
print(res)
# ['123', '456', '789']
性能稍好于列表理解。
答案 3 :(得分:-1)
使用地图http://docs.python.org/library/functions.html#map
In [2]: input_list = [123, 456, 789]
In [3]: output_list = map(lambda x:str(x), input_list)
In [4]: output_list
Out[5]: ['123', '456', '789']