根据另一个列表python返回列表中项目的索引

时间:2016-02-28 01:16:44

标签: python list

我需要在另一个列表中查找列表项。

例如:

a = ['s','u','v']
b = ['u','s','a']

我想得到一个布尔数组(或列表),它表示a中的每个项目,如果b中存在此项目。 所以对于那个例子我会得到:

[1,1,0]

由于

5 个答案:

答案 0 :(得分:5)

作为列表理解:

>>> a = ['s', 'u', 'v']
>>> b = ['u', 's', 'a']
>>> [i in b for i in a]
[True, True, False]
>>> [int(i in b) for i in a]
[1, 1, 0]

最重要的操作是i in b,它返回集合i中是否存在元素b。有关列表推导的信息,请阅读here

这也显示True == 1False == 0bool实际上是int的子类。如果他们需要int,则将其保留为TrueFalse会更快。

如果bset,这会更有效率,根据b的大小,您可能希望这样做。这可以通过set(b)完成。

答案 1 :(得分:0)

这是有效的,这是列表理解:

# a = ['s','u','v']
# b = ['u','s','a']

[(0,1)[e in b] for e in a]

# [1, 1, 0] ...

答案 2 :(得分:0)

在列表理解中使用条件,您可以获得所需内容:

a = ['s','u','v']
b = ['u','s','a']
[1 if i in b else 0 for i in a]

答案 3 :(得分:0)

如果你想要零而不是布尔值:

>>> [1 if i in b else 0 for i in a]
[1, 1, 0]

答案 4 :(得分:-3)

a = ['s','u','v']
b = ['u','s','a']

print ([int(t) for t in [x in b for x in a]])

输出;

[1, 1, 0]
>>> 

int()True == 1以来,使用列表推导并将布尔值转换为False == 0的整数。