在 Python 中的一组集合中查找具有特定元素的集合
Find set with specific element in set of sets in Python
我在 Python 中有以下一组集合(任何元素都不能出现超过一个):
set_of_sets = {frozenset({"01", "02", "03"}),
frozenset({"04", "05", "06"}),
frozenset({"07", "08"}),
frozenset({"09", "10"}),
frozenset({"11"}),
frozenset({"12"}),
frozenset({"13"}),
frozenset({"14"}),
frozenset({"15"})}
现在,我想弄清楚是否有任何请求的元素在集合集合中,如果是,具体集合是什么(获取这个集合的所有元素)。到目前为止我已经到了这里:
if any("001" in subset for subset in set_of_sets):
print("Present:")
else:
print("Not Present")
但这并没有给出搜索结果本身。我可以选择这个选项:
for subset in set_of_sets:
if "01" in subset:
print(subset)
但这并没有处理未找到相关元素的可能性,并且考虑到元素唯一出现的性质,对子集的这种完整迭代有点浪费(以防我们找到子集)。
你可以这样写:
next(s for s in set_of_sets if "08" in s)
如果找不到项目,这将引发 StopIteration
。
正如 Mark 在评论中指出的那样,如果您想要 None 这样的结果,可以使用 next
的可选默认参数来避免异常:
next((s for s in set_of_sets if "08" in s), None)
您可以对 return 找到的项目列表使用列表理解,因为您只会找到一个,所以您可以简单地打印找到的 [0]。空列表将命中 else 块并打印 'Not Present'
found = [subset for subset in set_of_sets if "13" in subset]
if found:
print("Present:")
print(found[0])
else:
print("Not Present")
我会使用以数字为键、以集合为值的字典,但我们也可以改进您的字典:
this full iteration over the subsets is somewhat wasteful
所以使用break
:
for subset in set_of_sets:
if "01" in subset:
print(subset)
break
this doesn't handle the possibility of not founding the element in question
所以使用else
:
for subset in set_of_sets:
if "01" in subset:
print(subset)
break
else:
print("Not Present")
我在 Python 中有以下一组集合(任何元素都不能出现超过一个):
set_of_sets = {frozenset({"01", "02", "03"}),
frozenset({"04", "05", "06"}),
frozenset({"07", "08"}),
frozenset({"09", "10"}),
frozenset({"11"}),
frozenset({"12"}),
frozenset({"13"}),
frozenset({"14"}),
frozenset({"15"})}
现在,我想弄清楚是否有任何请求的元素在集合集合中,如果是,具体集合是什么(获取这个集合的所有元素)。到目前为止我已经到了这里:
if any("001" in subset for subset in set_of_sets):
print("Present:")
else:
print("Not Present")
但这并没有给出搜索结果本身。我可以选择这个选项:
for subset in set_of_sets:
if "01" in subset:
print(subset)
但这并没有处理未找到相关元素的可能性,并且考虑到元素唯一出现的性质,对子集的这种完整迭代有点浪费(以防我们找到子集)。
你可以这样写:
next(s for s in set_of_sets if "08" in s)
如果找不到项目,这将引发 StopIteration
。
正如 Mark 在评论中指出的那样,如果您想要 None 这样的结果,可以使用 next
的可选默认参数来避免异常:
next((s for s in set_of_sets if "08" in s), None)
您可以对 return 找到的项目列表使用列表理解,因为您只会找到一个,所以您可以简单地打印找到的 [0]。空列表将命中 else 块并打印 'Not Present'
found = [subset for subset in set_of_sets if "13" in subset]
if found:
print("Present:")
print(found[0])
else:
print("Not Present")
我会使用以数字为键、以集合为值的字典,但我们也可以改进您的字典:
this full iteration over the subsets is somewhat wasteful
所以使用break
:
for subset in set_of_sets:
if "01" in subset:
print(subset)
break
this doesn't handle the possibility of not founding the element in question
所以使用else
:
for subset in set_of_sets:
if "01" in subset:
print(subset)
break
else:
print("Not Present")