使用Python返回相交列表的索引

时间:2014-04-23 14:03:32

标签: python intersection

我有两个清单:

1. ['a', 'b', 'c', 'd', 'e', 'c', 'd', 'f']
2. ['c', 'd']

我想获得交叉点的索引a,b:

3. [[2, 3], [5, 6]]

你会如何用Python做到这一点?

这些输入:

1. ['263', '9', '470', '370', '576', '770', '800', '203', '62', '370', '576', '370', '25', '770', '484', '61', '914', '301', '550', '770', '484', '1276', '108']
2. ['62', '370', '576']

应该给:

3. [[8, 9, 10]]

3 个答案:

答案 0 :(得分:2)

一种方法是:

>>> l1 = ['a', 'b', 'c', 'd', 'e', 'c', 'd', 'f']
>>> l2 = ['c', 'd']
>>> [range(i,i+len(l2)) for i in xrange(len(l1)-len(l2)+1) if l2 == l1[i:i+len(l2)]]
[[2, 3], [5, 6]]
>>> 

答案 1 :(得分:1)

对于您给出的示例,这将起作用

>>> x = ['a', 'b', 'c', 'd', 'e', 'c', 'd', 'f']
>>> y = ['c', 'd']
>>> z = [[i for i, xi in enumerate(x) if xi == yi] for yi in y]
>>> z
[[2, 5], [3, 6]]
>>> zip(*z)
[(2, 3), (5, 6)]

它使用枚举函数来获取x的索引以及值,然后使用zip(*z)转置结果。之后您可以从元组转换为列表。

编辑:转置结果。

答案 2 :(得分:0)

可能有点太多代码,但它确实有效。

def indexes(list, element):
    c = 0
    output = []
    for e in list:
        if e == element:
            output.append(c)
        c += 1
    return output

a = ['a', 'b', 'c', 'd', 'a']
b = ['a', 'd']
output = []
for el in b:
    output.append(indexes(a, el))

print(output)