如何检查Python集合是否已订购?
我想检查一个传递给函数的集合是否是有序的,即元素的顺序是固定的。(我不是在谈论“排序”。)
- A
set未排序。 lists 和tuples 是有序的。
是否有我可以使用的通用测试?
回答
有序非映射集合通常实现序列协议(其主要特点是通过__getitem__方法提供索引访问)并且可以针对collections.abc.Sequence以下内容进行类型测试:
from collections.abc import Sequence
isinstance(set(), Sequence)
# False
isinstance(list(), Sequence)
# True
isinstance(tuple(), Sequence)
# True
如果有人坚持应该包含有序映射,即 a dict(从 Python 3.7 开始订购),您可以针对collections.abc.Reversible以下情况进行测试:
isinstance(set(), Reversible)
# False
isinstance(list(), Reversible)
# True
isinstance(tuple(), Reversible)
# True
isinstance(dict(), Reversible)
# True