找出列表中的项目与范围中的数字之间的差异

时间:2018-11-07 14:11:55

标签: python for-loop range

我正在使用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循环。任何帮助将不胜感激!

2 个答案:

答案 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?