【问题标题】:Deep comparison of object types对象类型的深度比较
【发布时间】: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]}

dct1dct2 是相等的,因为它们都具有字符串形式的键和整数列表形式的值。

编辑:为简单起见,我们使用对 JSON 友好的类型,如字典、列表、整数等。我们不考虑混合子类型,如整数和字符串列表或具有不同键/值类型的字典 {'x': [1, 'b'], 2: (2, 'c')} 和只深入前两个级别。非常欢迎提供更通用解决方案的答案。

【问题讨论】:

  • 除了在 Haskell 中之外,在 Python 中,元素的类型不是容器类型类型的一部分或参数。 list 只是 list,而不是“ 列表”。虽然类型提示(连同typing module)允许您指定容器类型和元素类型中限制的值,并且mypy 允许静态地检查它们,但我不知道是否Python 支持以任何合理的方式比较两个复合值的动态“深度”类型。
  • 此外,您还必须进一步指定您认为属于“类型”的内容:[1, "2"]["1", 2] 是否属于同一类型?不同长度的列表呢?相同的规则是否适用于列表和元组?
  • @das-g 我们不考虑这种混合类型。

标签: python object types


【解决方案1】:

这是我的解决方案:

def same_same(l1,l2):
  return([type(x) for x in l1]==[type(x) for x in l2])

所以,解释一下:

该函数基本上会在l1 中创建一个新的类型列表,对于l2 则反之亦然。然后比较它们并返回TrueFalse

注意:仅适用于列表。

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多