Python验证列表与集合、字典的计算效率 .构建包含一千条数据的数据源:电话本(由姓名和电话号构成) 编写程序,分别查找其中任意名字或标识符的电话号码 并记录运行时间
时间: 2024-09-13 18:13:20 浏览: 35
在Python中,列表(List)、集合(Set)和字典(Dictionary)是常用的三种数据结构,它们在存储和检索数据时有着不同的效率。为了验证这三种数据结构在查找电话号码时的计算效率,我们可以构建一个包含一千条数据的电话本数据源,并分别使用列表、集合和字典来查找指定名字或标识符的电话号码,同时记录每次查找的运行时间。
下面是一个简单的Python程序示例,用于进行上述验证:
```python
import time
# 构建电话本数据源,这里我们假设电话本是一个字典,键为姓名,值为电话号码
telephone_book = {f"Name{i}": f"123-456-78{i}" for i in range(1000)}
# 列表版本的电话本,列表中元素为元组(姓名,电话号码)
telephone_list = [(name, number) for name, number in telephone_book.items()]
# 集合版本的电话本,集合中元素为姓名
telephone_set = set(telephone_book.keys())
# 定义要查找的名字
search_name = "Name500"
# 使用列表查找电话号码
start_time = time.time()
for name, number in telephone_list:
if name == search_name:
phone_number_list = number
break
end_list_time = time.time()
# 使用字典查找电话号码
start_dict_time = time.time()
phone_number_dict = telephone_book.get(search_name, None)
end_dict_time = time.time()
# 使用集合判断名字是否存在(集合查找效率很高)
start_set_time = time.time()
name_exists_set = search_name in telephone_set
end_set_time = time.time()
# 输出查找结果和运行时间
print(f"List lookup took {(end_list_time - start_list_time):.6f} seconds.")
print(f"Dictionary lookup took {(end_dict_time - start_dict_time):.6f} seconds.")
print(f"Set membership check took {(end_set_time - start_set_time):.6f} seconds.")
```
在这个示例中,我们首先创建了一个字典形式的电话本,然后创建了列表和集合版本的电话本。我们定义了一个要查找的名字,并分别记录了使用列表、字典和集合进行查找时的运行时间。
请注意,字典的`get`方法允许我们尝试获取一个键对应的值,如果键不存在,则返回`None`。这是字典查找的一个高效方式。而集合(Set)主要用于成员资格测试和消除重复元素,集合的成员资格测试(即判断一个元素是否属于集合)是非常高效的。
阅读全文