我正在尝试构建一个接受可迭代对象并返回元组的函数,前提是可迭代对象始终以规范的方式进行迭代。例如,如果输入 iterable 是 list
或 tuple
-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/