在乘客数据管理的相关开发工作中,经常需要从存储了乘客各类数值属性(如年龄、票价、消费金额、行程里程等)的列表中,筛选出属性值落在指定区间的乘客记录。这类需求在票务系统、出行服务平台、用户分析模块中非常常见,实现方式也有多种,可以根据数据规模和性能要求灵活选择。

基础实现思路
核心逻辑是遍历列表中的每一条乘客记录,判断目标数值属性是否满足预设的范围条件,将符合条件的记录收集到结果列表中。假设乘客数据以字典形式存储,包含name、age、ticket_price等字段,下面先给出最基础的循环实现方式。
使用for循环遍历筛选
这种方式逻辑直观,适合初学者理解,代码如下:
# 模拟乘客列表数据,每条记录是一个字典
passenger_list = [
{"name": "张三", "age": 22, "ticket_price": 350},
{"name": "李四", "age": 35, "ticket_price": 520},
{"name": "王五", "age": 18, "ticket_price": 280},
{"name": "赵六", "age": 42, "ticket_price": 680},
{"name": "孙七", "age": 28, "ticket_price": 420}
]
# 定义筛选范围:年龄20到40岁之间,票价300到500之间
min_age = 20
max_age = 40
min_price = 300
max_price = 500
# 存储筛选结果
result = []
for passenger in passenger_list:
# 判断年龄和票价是否都在指定范围内
if min_age <= passenger["age"] <= max_age and min_price <= passenger["ticket_price"] <= max_price:
result.append(passenger)
# 输出结果
print("符合条件的乘客:")
for p in result:
print(p)
使用列表推导式优化
如果筛选逻辑比较简洁,可以使用列表推导式让代码更紧凑,执行效率也略高于普通循环:
# 沿用上面的乘客列表和范围参数
passenger_list = [
{"name": "张三", "age": 22, "ticket_price": 350},
{"name": "李四", "age": 35, "ticket_price": 520},
{"name": "王五", "age": 18, "ticket_price": 280},
{"name": "赵六", "age": 42, "ticket_price": 680},
{"name": "孙七", "age": 28, "ticket_price": 420}
]
min_age = 20
max_age = 40
min_price = 300
max_price = 500
# 列表推导式直接生成结果
result = [
p for p in passenger_list
if min_age <= p["age"] <= max_age and min_price <= p["ticket_price"] <= max_price
]
print("符合条件的乘客:")
for p in result:
print(p)
封装为通用筛选函数
如果需要在多个地方复用筛选逻辑,可以把功能封装成函数,提高代码的可维护性:
def filter_passengers_by_range(passenger_list, field, min_val, max_val):
"""
从乘客列表中筛选指定字段值在范围内的记录
:param passenger_list: 乘客列表,元素为字典
:param field: 要筛选的字段名,字符串类型
:param min_val: 范围最小值
:param max_val: 范围最大值
:return: 符合条件的乘客列表
"""
return [p for p in passenger_list if min_val <= p.get(field, 0) <= max_val]
# 测试函数
passenger_list = [
{"name": "张三", "age": 22, "ticket_price": 350},
{"name": "李四", "age": 35, "ticket_price": 520},
{"name": "王五", "age": 18, "ticket_price": 280},
{"name": "赵六", "age": 42, "ticket_price": 680},
{"name": "孙七", "age": 28, "ticket_price": 420}
]
# 筛选年龄在20到40岁的乘客
age_result = filter_passengers_by_range(passenger_list, "age", 20, 40)
print("年龄符合条件的乘客:")
for p in age_result:
print(p)
# 筛选票价在300到500的乘客
price_result = filter_passengers_by_range(passenger_list, "ticket_price", 300, 500)
print("票价符合条件的乘客:")
for p in price_result:
print(p)
不同实现方式的适用场景
- 如果数据量小、筛选逻辑简单,直接使用for循环或者列表推导式即可,代码可读性高
- 如果筛选条件复杂,需要同时判断多个字段,建议封装为函数,避免重复代码
- 如果数据量非常大,可以考虑使用生成器表达式减少内存占用,或者使用numpy等库提升运算效率
实际开发中可以根据具体的业务需求和数据规模,选择最合适的实现方式,完成列表中指定数值范围乘客的搜索工作。