循环浏览列表中保留原始索引号的特定项目

时间:2018-07-04 20:34:53

标签: python list arraylist

我将尝试通过一个简单的例子来说明我要完成的工作。我正在寻找使用Python的解决方案。

有原始项目清单:

[ 0 1 2 3 4 ,< em> 5 , 6 7 8 9 ]

项目[ 2,4,8 ]具有粗体

的共同属性

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

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

我要保留原始索引号的原因是,例如,当我选择数字 8 时,我仍然可以访问其先前和随后的数字 7 9

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

2 个答案:

答案 0 :(得分:1)

我将使用枚举来获取包含项目及其各自索引的元组的迭代器(实际上,元组与(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语句,但是当您仅对粗体元素进行迭代时,我认为这更像Pythonic。

答案 1 :(得分:0)

for pos, item in enumerate(mylist):