查找python列表中两个不同组的索引到两个列表中

时间:2014-10-29 20:59:19

标签: python

我将下面的代码作为两个列表推导,但我想要一种方法,我只需要迭代edges一次。

        out_indices = [x for x, (p, d) in enumerate(edges) if d == "O"]
        in_indices = [x for x, (p, d) in enumerate(edges) if d == "I"]

我可以在edges上使用非pythonic循环并使用两个预先初始化的列表将x放入两个if语句中,但我想知道是否存在pythonic /更漂亮的方式。

2 个答案:

答案 0 :(得分:4)

不,你必须做你想要避免的事情(顺便说一下,根本不是非pythonic)。想一想 - 如果你想在一次迭代中做到这一点,你必须有条件地追加到任何明显不适用于理解的列表中:

out_indices = []
in_indices = []

for x, (p, d) in enumerate(edges):
    if d == 'O':
        out_indices.append(x)
    elif d == 'I':
        in_indices.append(x)

答案 1 :(得分:3)

对于两个,我只是初始化空列表,但是,如果你有很多,最好存储在dict中,例如:

data = 'OIIIOIIOOOIOOO'

d = {}
for i, v in enumerate(data):
    d.setdefault(v, []).append(i)

# {'I': [1, 2, 3, 5, 6, 10], 'O': [0, 4, 7, 8, 9, 11, 12, 13]}

然后通过d['I']d['O']进行访问,或者如果无法保证其存在,请使用d.get('I', [])d.get('O', [])获取非现有值的空列表。< / p>