如何筛选距离矩阵:获取指定客户端半径内的城市列表
实现按客户端筛选指定半径内城市的函数
核心需求是:给定客户端X和距离阈值,返回所有与X距离小于阈值的城市名称列表。下面分两种常用数据结构给出实现方案:
基于Pandas的实现(适合结构化表格数据)
假设你用Pandas DataFrame存储客户端-城市的距离数据,行索引是客户端名称,列名是城市名称,单元格值为对应距离。
代码示例
import pandas as pd def get_nearby_cities(client_x, radius, df): # 定位目标客户端的行数据 client_distances = df.loc[client_x] # 筛选距离小于阈值的城市,并转为列表 return client_distances[client_distances < radius].index.tolist() # 构造示例数据 distance_df = pd.DataFrame( data={ 'A': [0, 3.1, 2.2], 'B': [1.2, 0, 1.8], 'C': [1.5, 1.8, 0], 'D': [0.8, 2.5, 3.0], 'E': [1.9, 2.1, 2.7], 'F': [1.7, 2.3, 1.1], 'I': [1.3, 3.2, 2.4], 'M': [1.6, 2.0, 2.9], 'O': [1.4, 2.8, 1.5] }, index=['A', 'B', 'C'] ) # 测试函数 print(get_nearby_cities('A', 2, distance_df)) # 输出: ['A', 'B', 'C', 'D', 'E', 'F', 'I', 'M', 'O']
关键步骤说明
df.loc[client_x]:通过行索引精准获取目标客户端对应的所有城市距离数据,返回一个Series对象(索引为城市名,值为距离)。client_distances < radius:生成布尔掩码,标记出距离小于阈值的城市。.index.tolist():提取符合条件的城市名称,转为列表返回。
基于原生Python字典的实现(适合轻量数据)
如果数据用嵌套字典存储(外层键为客户端,内层键为城市,值为距离),可以直接用列表推导式实现:
代码示例
def get_nearby_cities(client_x, radius, distance_dict): # 获取目标客户端的城市-距离映射 client_data = distance_dict[client_x] # 过滤并返回符合条件的城市列表 return [city for city, dist in client_data.items() if dist < radius] # 构造示例数据 distance_dict = { 'A': { 'A': 0, 'B': 1.2, 'C': 1.5, 'D': 0.8, 'E': 1.9, 'F': 1.7, 'G': 2.1, 'I': 1.3, 'M': 1.6, 'O': 1.4 }, 'B': { 'A': 3.1, 'B': 0, 'C': 1.8 # 可补充其他城市距离数据 } } # 测试函数 print(get_nearby_cities('A', 2, distance_dict)) # 输出目标城市列表
关键步骤说明
- 直接通过键取值
distance_dict[client_x]拿到目标客户端的所有城市距离数据。 - 用列表推导式遍历城市-距离对,筛选出距离小于阈值的城市名。
内容的提问来源于stack exchange,提问作者Valentin Galardi
相关产品推荐
相关产品推荐

