2024-09-29 01:37:25 发布
网友
出于某种原因,当我做代码。。。
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']?
['123', '456', '789']
谢谢!
问题是,当您在一个列表上使用+=时,它期望操作符另一端的对象是一个列表或其他某种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之前,它有效地*将字符串转换为字符列表,如下例所示:
str(x)
result2
>>> [list(str(x)) for x in result] [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
正如NullUserException所建议的,转换列表中的项的快速方法是使用列表理解。在这种情况下,只需删除上面的list调用。
list
*准确地说,它将str(x)的结果转换为迭代器(例如通过调用iter()——或者,正如eryksun所指出的,通过调用相应的C API函数PyObject_GetIter,当然这只适用于cpython)。由于对字符串的迭代实际上是对字符串中单个字符的迭代,因此每个字符都将分别添加到列表中。
iter()
函数方法是使用list(map(str, lst)):
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'](其他值也是这样)。
str(123)
'123'
['1', '2', '3']
为了让它按你的方式工作,你需要:
result2.append(str(x)) # instead of result2 += str(x)
您获得所获得的内容的原因是+=正在进行列表连接。由于str(123)是'123',这可以看作['1', '2', '3'],当您将其连接到空列表时,您将得到['1', '2', '3'](其他值也是这样)。
问题是,当您在一个列表上使用
+=
时,它期望操作符另一端的对象是一个列表或其他某种iterable。所以你可以这样做:但是当你这样做的时候:
Python假设您打算将
str(x)
的结果视为iterable,因此在扩展result2
之前,它有效地*将字符串转换为字符列表,如下例所示:正如NullUserException所建议的,转换列表中的项的快速方法是使用列表理解。在这种情况下,只需删除上面的
list
调用。*准确地说,它将
str(x)
的结果转换为迭代器(例如通过调用iter()
——或者,正如eryksun所指出的,通过调用相应的C API函数PyObject_GetIter,当然这只适用于cpython)。由于对字符串的迭代实际上是对字符串中单个字符的迭代,因此每个字符都将分别添加到列表中。函数方法是使用
list(map(str, lst))
:表现略好于列表理解。
怎么样:
你得到你得到的东西的原因是
+=
正在进行列表连接。由于str(123)
是'123'
,这可以看作['1', '2', '3']
,当您将其连接到空列表时,您将得到['1', '2', '3']
(其他值也是这样)。为了让它按你的方式工作,你需要:
怎么样:
您获得所获得的内容的原因是
+=
正在进行列表连接。由于str(123)
是'123'
,这可以看作['1', '2', '3']
,当您将其连接到空列表时,您将得到['1', '2', '3']
(其他值也是这样)。为了让它按你的方式工作,你需要:
相关问题 更多 >
编程相关推荐