python数字列表错误地转换为字符串

时间:2011-08-05 01:54:32

标签: python string list

出于某种原因,当我做代码时......

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']

谢谢!

4 个答案:

答案 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']