我正在使用python book自动完成无聊的工作,并且在第139页。我必须编写一个程序,在每行的前面添加一个“ *”。但是,我的for循环似乎在这里不起作用。
rawtextlist = [
'list of interesting shows',
'list of nice foods',
'list of amazing sights'
]
for item in rawtextlist:
item = '*' + item
我的输出如下。使用上面的代码时,我在每行前面缺少'*'字符。
list of interesting shows
list of nice foods
list of amazing sights
书中提供的答案就是这样。
for i in range(len(rawtextlist)):
rawtextlist[i] = '*' + rawtextlist[i]
该程序仅适用于书中提供的答案,不适用于我的for循环。任何帮助将不胜感激!
答案 0 :(得分:1)
这里:
item = whatever_happens_doesnt_matter()
在第一种情况下,创建并丢弃了item
承载的引用,该引用与原始列表中的引用不同(变量名称为 ressigned )。而且,由于字符串是不可变的,因此无法使其正常工作。
这就是为什么书必须使用非常反Python的for .. range
并索引原始列表结构以确保分配回正确的字符串引用的原因。糟透了。
一种更好的Python方式是使用列表理解来重建列表:
rawtextlist = ['*'+x for x in rawtextlist]
更多有关列表理解方法的信息:Appending the same string to a list of strings in Python
答案 1 :(得分:0)
您在for循环中声明的参数item
是一个新变量,每次保存对数组中下一个字符串的引用。
实际上,您在循环中所做的就是重新定义变量item
,使其指向 new 字符串,但这不是您想要的(您可以不要更改列表中的字符串,只需创建新字符串并将其保存到临时变量即可。
您可以使用提供的程序,也可以使用更新的字符串创建新建列表,如下所示:
new_list = []
for item in rawtextlist:
new_list.append('*' + item)
print(new_list)
或单行解决方案:
new_list = ['*' + item for item in rawtextlist]
print(new_list)
此外,字符串是不可变的,因此我建议您着眼于以下问题和答案:Aren't Python strings immutable? Then why does a + " " + b work?