【问题标题】:python modify item in list, save back in listpython修改列表中的项目,保存回列表中
【发布时间】:2011-09-02 01:54:44
【问题描述】:

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

我很难将一个项目恢复到同一个索引中

for item in list:
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[item] = item
        print item

现在我得到一个错误

TypeError: list indices must be integers, not str

由于这条线list[item] = item

这是有道理的!但我不知道如何使用 python 将项目放回同一索引处的列表中

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

【问题讨论】:

  • 为什么一定要在列表的地方做呢?我最初的反应是使用列表理解: res = [ replace_all(item,replaceDictionary) for item in list if 'foo' in item ]
  • 这很狡猾,但这和这有什么不同呢?
  • 我能看到的唯一问题是您试图通过使用项目本身而不是项目的索引来引用列表项。除此之外看起来还不错。此外,您正在修改列表项,然后再引用它。可能是字典的问题。
  • 关于上述内容的一般问题,replace_all 是否已弃用?还是我错过了它是代码中未定义的自定义函数。

标签: python list for-loop


【解决方案1】:

你可以这样做:

for idx, item in enumerate(list):
   if 'foo' in item:
       item = replace_all(...)
       list[idx] = item

【讨论】:

  • ValueError: too many values to unpack ,我一直怀疑我的列表空间已经用完了,有没有办法预先管理要处理多少空间以进一步深入列表? (可能是一个新问题)
  • @RD.: 你确定你用过枚举?
  • 啊,在这篇文章中没有注意到。这似乎奏效了。尽管当我尝试将其加入字符串 listString = ''.join(list) 时再次遇到内存空间问题,但由于某种原因,它决定打印出它到控制台的距离,并且没有完成程序的其余部分
  • 用 Python 3 得到了这个:NameError: name 'replace_all' is not defined
【解决方案2】:

需要用到枚举函数:python docs

for place, item in enumerate(list):
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[place] = item
        print item

此外,将单词列表用作变量是个坏主意,因为它是 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

【讨论】:

    【解决方案3】:

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

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

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

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

    enumerate

    【讨论】:

      【解决方案4】:

      对于 Python 3:

      ListOfStrings = []
      ListOfStrings.append('foo')
      ListOfStrings.append('oof')
      for idx, item in enumerate(ListOfStrings):
          if 'foo' in item:
              ListOfStrings[idx] = "bar"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 2021-04-25
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 2018-10-23
        • 2017-08-06
        相关资源
        最近更新 更多