我需要在另一个列表中查找列表项。
例如:
a = ['s','u','v']
b = ['u','s','a']
我想得到一个布尔数组(或列表),它表示a中的每个项目,如果b中存在此项目。 所以对于那个例子我会得到:
[1,1,0]
由于
答案 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 == 1
和False == 0
。 bool
实际上是int
的子类。如果他们需要为int
,则将其保留为True
和False
会更快。
如果b
是set
,这会更有效率,根据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
的整数。