【发布时间】:2021-12-31 21:05:44
【问题描述】:
如何比较对象类型包括子类型?例如:
lst1 = [1, 2, 3]
lst2 = ['a', 'b', 'c']
lst1 是整数列表,lst2 是字符串列表,因此它们不相等。另一个例子:
dct1 = {'a': [1, 2, 3]}
dct2 = {'b': [4, 5, 6]}
dct1 和 dct2 是相等的,因为它们都具有字符串形式的键和整数列表形式的值。
编辑:为简单起见,我们使用对 JSON 友好的类型,如字典、列表、整数等。我们不考虑混合子类型,如整数和字符串列表或具有不同键/值类型的字典 {'x': [1, 'b'], 2: (2, 'c')} 和只深入前两个级别。非常欢迎提供更通用解决方案的答案。
【问题讨论】:
-
除了在 Haskell 中之外,在 Python 中,元素的类型不是容器类型类型的一部分或参数。
list只是list,而不是“列表”。虽然类型提示(连同 typingmodule)允许您指定容器类型和元素类型中限制的值,并且mypy允许静态地检查它们,但我不知道是否Python 支持以任何合理的方式比较两个复合值的动态“深度”类型。 -
此外,您还必须进一步指定您认为属于“类型”的内容:
[1, "2"]和["1", 2]是否属于同一类型?不同长度的列表呢?相同的规则是否适用于列表和元组? -
@das-g 我们不考虑这种混合类型。