【问题标题】:Cycle through specific items in list retaining original index number循环浏览列表中的特定项目,保留原始索引号
【发布时间】:2018-12-13 07:05:54
【问题描述】:

我将尝试通过一个简单的示例来解释我想要完成的任务。我正在寻找使用 Python 的解决方案。

有一份原始物品清单:

[0, 1, 2, 3, 4, 5、6789]

项目 [2,4,8] 具有 Bold

的共同属性

从原始项目列表中,我希望能够仅循环浏览具有 Bold [2,4,8] 共同属性的项目跳过斜体中的数字,例如items.type == BOLD

我知道我可以使用 粗体 项创建一个新列表并通过这些项进行索引,但是,我希望能够循环浏览原始项列表并选择 粗体项目的原始索引号。

我想保留原始索引号的原因是,例如,当我选择数字 8 时,我仍然可以访问它的前面和后面的数字,7 em> 和 9

我希望这是有道理的。 任何帮助将不胜感激。

【问题讨论】:

    标签: python list arraylist


    【解决方案1】:

    我会使用 enumerate 来获取包含项目及其各自索引的元组迭代器(元组实际上是相反的:(index, item)))。

    然后您可以使用生成器理解来过滤掉那些没有type 属性的对象:"BOLD" 并将其解压缩到 for 循环中。然后,您可以使用粗体项目,以及原始列表中的索引。

    比如:

    for i, e in (t for t in enumerate(lst) if t[1].type == "BOLD"):
        print(e.name, 'is at index', i)
        print(lst[i-1].name, 'is before')
        print(lst[i+1].name, 'is after')
    

    以及在以下声明之后运行时:

    class Item:
        def __init__(self, type, name):
            self.type = type
            self.name = name
    
    lst = [Item('ITALIC','Bob'), Item('BOLD','Bill'), Item('BOLD','Jim'), Item('ITALIC','Tim')]
    

    我们得到:

    Bill is at index 1
    Bob is before
    Jim is after
    Jim is at index 2
    Bill is before
    Tim is after
    

    当然,您可以在循环中使用 if 语句,但我会认为这更符合 Python 风格,因为您只迭代粗体元素。

    【讨论】:

      【解决方案2】:
      for pos, item in enumerate(mylist):
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-08
        • 1970-01-01
        • 2017-01-08
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多