我有一堆,frozensets
它们都是列表的子集。我想知道的是列表中冻结集的每个元素的位置。
例如:
a = frozenset([1])
b = frozenset([2, 3])
l = [1, 2, 3, 4]
现在我已经知道 freezesets 是 list 的一个子集l
。
我想要的是列表中项目的索引位置,即当我检查时a
,函数应该返回1
列表中的索引位置,l
即[0]
。
同样for b
,应该先return [1, 2]
。
我有一堆,frozensets
它们都是列表的子集。我想知道的是列表中冻结集的每个元素的位置。
例如:
a = frozenset([1])
b = frozenset([2, 3])
l = [1, 2, 3, 4]
现在我已经知道 freezesets 是 list 的一个子集l
。
我想要的是列表中项目的索引位置,即当我检查时a
,函数应该返回1
列表中的索引位置,l
即[0]
。
同样for b
,应该先return [1, 2]
。
如果您已经知道a
并且b
是子集,只需使用列表推导来收集成员值的索引;使用enumerate()
函数提供索引:
result = [i for i, v in enumerate(l) if v in subset]
您的实例subset
之一在哪里。frozenset
演示:
>>> a = frozenset([1])
>>> b = frozenset([2, 3])
>>> l = [1, 2, 3, 4]
>>> [i for i, v in enumerate(l) if v in a]
[0]
>>> [i for i, v in enumerate(l) if v in b]
[1, 2]
如果l
是常量并且它的项目是可散列的(如果它们是集合的成员,它们必须是),那么为什么不创建一个索引:
idx = {v:i for i,v in enumerate(l)}
如果l
有重复项 ( len(l)!=len(set(l))
),这可能会出现问题。
那么从一组值返回一组索引的函数是:
def indexes(S):
return set(idx[v] for v in S)
这将返回一个集合而不是一个列表,因为集合 S 的顺序是未定义的,因此索引列表的顺序也是未定义的,因此不要使用列表并暗示不存在的顺序,而是使用集合。