0

我有一堆,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]

4

2 回答 2

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]
于 2017-05-21T23:01:30.037 回答
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 的顺序是未定义的,因此索引列表的顺序也是未定义的,因此不要使用列表并暗示不存在的顺序,而是使用集合。

于 2017-05-21T23:11:36.280 回答