检查冻结集是否是列表的子集以及作为子集的每个元素的索引
Check to see if frozen set is a subset of list and the index of every element that is a subset
我有一堆 frozensets
它们都是列表的子集。我想知道的是冻结集合的每个元素在列表中的位置。
例如:
a = frozenset([1])
b = frozenset([2, 3])
l = [1, 2, 3, 4]
现在我已经知道 frozensets 是列表的一个子集 l
。
我想要的是列表中项目的索引位置,即当我检查 a
时,函数应该 return 列表中 1
的索引位置 l
即 [0]
.
与b
类似,它应该首先return [1, 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]
如果 l
是常量并且它的项目是可散列的(如果它们是集合的成员则它们必须是散列的),那么为什么不创建索引:
idx = {v:i for i,v in enumerate(l)}
如果 l
有重复项 (len(l)!=len(set(l))
),这可能会有问题。
那么 returns 一组值中的一组索引的函数是:
def indexes(S):
return set(idx[v] for v in S)
这个 returns 是一个集合而不是一个列表,因为集合 S 的顺序是未定义的,所以索引列表的顺序也是未定义的,所以而不是使用列表并暗示一个未定义的顺序存在,用一套。
我有一堆 frozensets
它们都是列表的子集。我想知道的是冻结集合的每个元素在列表中的位置。
例如:
a = frozenset([1])
b = frozenset([2, 3])
l = [1, 2, 3, 4]
现在我已经知道 frozensets 是列表的一个子集 l
。
我想要的是列表中项目的索引位置,即当我检查 a
时,函数应该 return 列表中 1
的索引位置 l
即 [0]
.
与b
类似,它应该首先return [1, 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]
如果 l
是常量并且它的项目是可散列的(如果它们是集合的成员则它们必须是散列的),那么为什么不创建索引:
idx = {v:i for i,v in enumerate(l)}
如果 l
有重复项 (len(l)!=len(set(l))
),这可能会有问题。
那么 returns 一组值中的一组索引的函数是:
def indexes(S):
return set(idx[v] for v in S)
这个 returns 是一个集合而不是一个列表,因为集合 S 的顺序是未定义的,所以索引列表的顺序也是未定义的,所以而不是使用列表并暗示一个未定义的顺序存在,用一套。