For loop with .replace()



我需要将"名称"列表更改为"用户名"形式。

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
--> 
usernames = ["joey_tribbiani", "monica_geller", "chandler_bing", "phoebe_buffay"]

我编写了如下代码,但它只输出 ["phoebe_buffay"]

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
usernames = []

for name in names:
names = name.replace(" ", "_").lower()
usernames = names


print(usernames)

问题出在哪里?

您可以在一行中执行此操作:

usernames = [n.replace(" ", "_").lower() for n in names]

问题是usernames总是在循环中被替换。改为尝试usernames.append(name.replace(" ", "_").lower())

你必须小心列表

以下代码将起作用

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
usernames = []

for name in names:
usernames.append(name.replace(" ", "_").lower())

print(usernames)
names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
usernames = []
for name in names:
usernames.append(name.replace(" ", "_").lower())
print(usernames)

您需要使用name而不是names并且您不必为usernames分配新值,您必须将新项目附加到列表中。

法典

for name in names:
name = name.replace(" ", "_").lower()
usernames.append(name)

python 中的变量是指向底层对象的指针。

问题

最初,您设置usernames->[]并在 for 循环的每次迭代中设置names->name.replace(" ", "_").lower()

在最后一次迭代中,计算结果为names->"phoebe_buffay". 然后更新usernames->names,该 - 评估为usernames->"phoebe_buffay"

溶液

在 for 循环中构建一个新数组:

usernames = []
for name in names:
usernames.append(name.replace(" ", "_").lower())

使用列表推导式

建立列表正是python设计列表理解的目的:

usernames = [name.replace(" ", "_").lower() for name in names]

使用地图函数

或者,您可以使用map函数将"映射"应用于所有元素:

usernames = list(map(lambda name: name.replace(" ", "_").lower(), names))

您需要编写 usernames.append(names) 才能在 usernames 数组中插入名称。 像下面这样:

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
usernames = []

for name in names:
usernames.append(name.replace(" ", "_").lower())


print(usernames)

最新更新