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

2024-09-29 01:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

谢谢!


Tags: 代码infordefresultencodeprintstr
4条回答

问题是,当您在一个列表上使用+=时,它期望操作符另一端的对象是一个列表或其他某种iterable。所以你可以这样做:

>>> 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)的结果视为iterable,因此在扩展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)。由于对字符串的迭代实际上是对字符串中单个字符的迭代,因此每个字符都将分别添加到列表中。

函数方法是使用list(map(str, lst))

lst = [123, 456, 789]

res = list(map(str,  lst))

print(res)
# ['123', '456', '789']

表现略好于列表理解。

怎么样:

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)

怎么样:

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)

相关问题 更多 >