【发布时间】:2020-12-11 15:18:05
【问题描述】:
我想检查一个已经传递给函数的集合是否是有序的,即元素的顺序是固定的。 (我不是在说“排序”。)
-
set未订购。 -
lists 和tuples 已订购。
是否有我可以使用的通用测试?
【问题讨论】:
标签: python collections
我想检查一个已经传递给函数的集合是否是有序的,即元素的顺序是固定的。 (我不是在说“排序”。)
set 未订购。lists 和 tuples 已订购。是否有我可以使用的通用测试?
【问题讨论】:
标签: python collections
有序的非映射集合通常实现sequence protocol(其主要特点是通过__getitem__方法提供索引访问)并且可以针对collections.abc.Sequence进行类型测试:
from collections.abc import Sequence
isinstance(set(), Sequence)
# False
isinstance(list(), Sequence)
# True
isinstance(tuple(), Sequence)
# True
如果有人坚持应该包含有序映射,即 dict (ordered as of Python 3.7),您可以针对 collections.abc.Reversible 进行测试:
isinstance(set(), Reversible)
# False
isinstance(list(), Reversible)
# True
isinstance(tuple(), Reversible)
# True
isinstance(dict(), Reversible)
# True
【讨论】:
False 代表dict()。即使在 Python 3.9 中。
dict 是一个映射。
dict(就像一个集合)显然不是一个序列,所以它工作得很好。它是not non-mapping,它是not ordered,它的__getitem__方法是不 提供索引访问,而是键控访问。所以它没有答案提到的序列的三个属性中的任何一个。
dicts 已订购。自从 Python 3.7 以来,它已经出现了将近 2.5 年。它们也是集合,这就是问题所在(它说了三遍)。有序集合。字典是。这个答案的方法不能确定。