python - 在python中检测有序的iterables(序列)

标签 python

我正在尝试构建一个接受可迭代对象并返回元组的函数,前提是可迭代对象始终以规范的方式进行迭代。例如,如果输入 iterable 是 listtuple-like,我想接受输入,但如果它是 dict-like (如果不能保证 key 的顺序)。是否有任何 python 函数可以检测始终以相同顺序迭代的对象与顺序可以在版本之间更改或取决于 PYTHONHASHSEED 的对象之间的差异?

isinstance(x, collections.Sequence) 做了大部分我想要的,但生成器不是序列。下面的代码似乎可以满足我的要求,但我不确定我是否漏掉了一些东西,或者是否有更通用的方法来捕捉有序但不一定可索引、可迭代的想法。

import collections, types
def to_tuple(x):
    if isinstance(x, collections.Sequence) or isinstance(x, types.GeneratorType):
        return tuple(x)
    raise Exception("Cannot be iterated canonically")

最佳答案

没有这样的功能。即使使用生成器,您也希望能够捕获

(x for x in {1, 2, 3})

但允许

(x for x in [1, 2, 3])

如果 type(x) 是 dict,我建议只发出警告。甚至 isinstance(x, dict) 也不行,因为 OrderedDicts 是有序的。

关于python - 在python中检测有序的iterables(序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38087720/

相关文章:

python - 使用 Hough Circle 变换从图像中检测圆

python - 如何为 python 中的所有 print() 输出设置前缀?

python 检查数值

python - 有向图中的最大公共(public)子图

python - 使用 python 和 mechanize 登录 Instagram

Python3 字典值被覆盖

python - 子类避免父类的元类

python - BeautifulSoup 中的匹配标签

python - 磁条(黑色矩形)检测

python - 使用gather_nd构建矩阵