检查冻结集是否是列表的子集以及作为子集的每个元素的索引

时间:2017-05-21 22:56:02

标签: python python-2.7 list frozenset

我有一堆aux.set(i, intervals.get(i));,它们都是列表的子集。我想知道的是列表中冻结集的每个元素的位置。

例如:

frozensets

现在我已经知道frozensets是列表a = frozenset([1]) b = frozenset([2, 3]) l = [1, 2, 3, 4] 的一个子集。

我想要的是列表中项目的索引位置,即当我检查l时,该函数应该返回列表a1的索引位置,即{ {1}}。

对于l,同样应首先返回[0]

2 个答案:

答案 0 :(得分:2)

如果您已经知道ab是子集,只需使用列表推导来收集作为成员的值的索引;使用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的顺序是未定义的,因此索引列表的顺序也是未定义的,因此不是使用列表而是暗示不存在的顺序,请使用集合。