我有一个列表:
roll = [1, 2, 3]
为了将每个元素转换为字符串,我们可以直接执行roll = str(roll)
,而不是对其进行迭代并对每个元素调用str()
吗?这是正确的方式吗?
我是Python的新手,任何正确方向的提示都可以!
这不起作用,因为这会将整个列表转换为一个字符串:
roll = [1, 2, 3]
roll = str(roll)
print(roll)
# Prints [1, 2, 3]
print(type(roll))
# Prints <class 'str'>
相反,你可以使用列表理解,将列表中的每个项目逐一转换:
roll = [1, 2, 3]
roll = [str(r) for r in roll]
print(roll)
# Prints ['1', '2', '3']
print(type(roll))
# Prints <class 'list'>
从类型的角度考虑,原始变量的类型为List[int]
([1, 2, 3]
(。
使用str
函数时,结果是一个类型为str
(也称为'[1, 2, 3]'
(的元素,但这不是您想要的结果,因为您希望将列表中的每个单独元素转换为str
,从而使所需的类型成为List[str]
(['1', '2', '3']
(。
在python中,有几种规范的方法可以将函数应用于每个单独的元素:
列表理解
new_roll = [str(x) for x in roll] # ['1', '2', '3']
这种方法是最简单的。它基本上是一个做以下事情的班轮:
new_roll = []
for x in roll:
new_roll.append(str(x))
请注意,原始变量roll
不会发生变化,因为它正在创建一个新列表。
地图
做同样事情的另一种方法是在python中使用map
函数。然而,出于效率的原因,输出的类型是类型Map[str]
而不是类型List[str]
。
roll_map = map(str, roll)
for x in roll_map:
print(x)
它基本上是在做以下事情:
roll = [1, 2, 3]
for x in roll:
str_x = str(x)
print(str_x)
请注意,为了节省内存,没有创建新的列表。当您需要将函数的结果应用于列表(或通常的迭代器(,但又不想存储函数应用程序的结果(以节省内存(时,此方法通常适用。
通过map
函数获得列表的常见破解是通过list(map(str, roll))
。
是的,这可以在不使用循环的情况下完成,方法如下:
roll = list(map(str, roll))