python修改列表中的项目,保存回列表

CQM*_*CQM 27 python for-loop list

我有一种预感,我需要访问列表中的项目(字符串),修改该项目(作为字符串),并将其放回同一索引的列表中

我很难将一个项目放回到相同的索引中

for item in list:
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[item] = item
        print item
Run Code Online (Sandbox Code Playgroud)

现在我收到一个错误

TypeError: list indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)

由于这条线 list[item] = item

这很有意义!但我不知道如何使用python将项目放回到同一索引的列表中

这是什么语法?理想情况下,for循环可以跟踪我当前所处的索引

Cat*_*lus 45

你可以这样做:

for idx, item in enumerate(list):
   if 'foo' in item:
       item = replace_all(...)
       list[idx] = item
Run Code Online (Sandbox Code Playgroud)

  • @RD.:你确定你使用了枚举? (4认同)

Spe*_*bun 7

您需要使用枚举函数:python docs

for place, item in enumerate(list):
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[place] = item
        print item
Run Code Online (Sandbox Code Playgroud)

另外,使用单词列表作为变量是一个坏主意,因为它是python中的保留字.

由于您遇到了枚举问题,因此可以使用itertools库中的替代方法:

for place, item in itertools.zip(itertools.count(0), list):
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[place] = item
        print item
Run Code Online (Sandbox Code Playgroud)


小智 5

更改列表中每个元素的常用习惯用法如下所示:

for i in range(len(L)):
    item = L[i]
    # ... compute some result based on item ...
    L[i] = result
Run Code Online (Sandbox Code Playgroud)

这可以使用 enumerate() 重写为:

for i, item in enumerate(L):
    # ... compute some result based on item ...
    L[i] = result
Run Code Online (Sandbox Code Playgroud)

请参阅枚举