我有一堆aux.set(i, intervals.get(i));
,它们都是列表的子集。我想知道的是列表中冻结集的每个元素的位置。
例如:
frozensets
现在我已经知道frozensets是列表a = frozenset([1])
b = frozenset([2, 3])
l = [1, 2, 3, 4]
的一个子集。
我想要的是列表中项目的索引位置,即当我检查l
时,该函数应该返回列表a
中1
的索引位置,即{ {1}}。
对于l
,同样应首先返回[0]
。
答案 0 :(得分:2)
如果您已经知道a
和b
是子集,只需使用列表推导来收集作为成员的值的索引;使用enumerate()
function提供索引:
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]
答案 1 :(得分:0)
如果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的顺序是未定义的,因此索引列表的顺序也是未定义的,因此不是使用列表而是暗示不存在的顺序,请使用集合。