Projection
139 天前
创建一个类并自定义 __contains__ 魔术方法,实现则使用 bisect 二分查找。根据这个思路找 GPT 生成了代码:
import bisect
class OrderedList:
def __init__(self, items):
# 确保列表有序
self.items = sorted(items)
# 自定义 in 操作,使用二分查找
def __contains__(self, item):
# 使用 bisect 模块进行二分查找
index = bisect.bisect_left(self.items, item)
# 检查查找到的索引是否在范围内,且对应元素是否与目标相等
return index < len(self.items) and self.items[index] == item
# 支持遍历
def __iter__(self):
return iter(self.items)
# 使用示例
ordered_list = OrderedList([10, 1, 7, 3, 5])
# 遍历
for item in ordered_list:
print(item) # 输出: 1 3 5 7 10 (有序)
# 使用自定义的 in 操作(使用二分查找)
print(7 in ordered_list) # 输出: True
print(6 in ordered_list) # 输出: False