使用Python将所有列表元素覆盖为字符串



我有一个列表:

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))

最新更新