python - 如何检查给定对象列表中每种不同类型的对象是否具有可比性?
问题描述
作为防御性编程的一种手段,我实现了一段相当简单的代码来检查传递给我的函数的给定列表的所有元素(不同类型)是否可以通过比较运算符相互比较(有一个或全部实施的丰富比较方法)。
我对此的看法是遍历列表并对可用类型以及字典中每个对象的单个实例进行编目,然后遍历字典的键,将每个选定的对象相互比较以查看它们是否返回布尔值或提高TypeError
.
下面是我的想法的实现:
test = [1, 2, 'str', 4.5, {'r':'d'}]
type_dict = {}
for elem in test:
if not isinstance(elem, tuple(type_dict.keys())):
type_dict[type(elem)] = elem
cmp = True
for obj1 in type_dict.keys():
for obj2 in type_dict.keys():
try:
type_dict.get(obj1) > type_dict.get(obj2)
except TypeError:
cmp = False
break
if not cmp:
break
if cmp:
print('Objects in list are comparable.')
else:
print('Objects in list are not comparable.')
只是出于好奇,有没有更简洁的方法通过 python 内置或库来做到这一点?
解决方案
您所要做的就是尝试对列表进行排序。
try:
sorted(list_of_elements)
print('Objects in list are comparable.')
except TypeError:
print('Objects in list are not comparable.')
推荐阅读
- azure-cosmosdb - Cosmos DB SQL API Node.js - 继续令牌
- java - 根据按钮文本为文本字段分配值
- c# - 在 C# 中反序列化 JSON 以列出具有未知对象名称的列表
- javascript - 在 sm 和\或 md 屏幕上折叠引导卡
- javascript - Javascript 读取一次然后部分忽略?
- scrapy - 使用 Scrapy 从表格中提取文本
- c++ - 使用 C++ 使用 opencv 覆盖
- https - 为什么这个码头连接器文件夹神秘地出现在我的文件中?
- java - 无法使用 Jackson 解析 JSON(映射不起作用)
- reactjs - 将 Unstated 与 TypeScript 和 React 一起使用,如何在其中获取类型化的容器实例
孩子们?