如何基于LIST_A与LIST_B生成符合指定规则的目标方向列表?
方向转换需求实现方案
已知条件
我们有两个方向列表:
- 完整顺时针方向列表:
LIST_A=['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW']
- 需要处理的目标方向列表:
LIST_B=['E','NNE','S','SSE','SW','N']
需求说明
对LIST_B中的每个方向,需完成两步操作后返回结果:
- 找到该方向的相反方向(例如'E'的相反方向为'W')
- 将相反方向顺时针递增一步(例如'W'顺时针走一步为'WNW')
最终需得到目标列表:
DESIRED_LIST=['WNW','SW','NNE','N','ENE','SSW']
实现思路
LIST_A是按顺时针排列的16个方向,相邻方向间隔22.5度:
- 相反方向的位置:原方向索引 + 8(16/2=8),超出列表长度时取模16
- 顺时针递增一步:相反方向的索引 + 1,同样取模16(列表为环形结构,最后一个方向'NNW'顺时针一步回到第一个'N')
Python代码实现
LIST_A=['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'] LIST_B=['E','NNE','S','SSE','SW','N'] DESIRED_LIST = [] for dir in LIST_B: # 获取当前方向在完整列表中的索引 original_idx = LIST_A.index(dir) # 计算相反方向的索引 opposite_idx = (original_idx + 8) % 16 # 计算顺时针递增一步后的索引 target_idx = (opposite_idx + 1) % 16 # 将对应方向加入结果列表 DESIRED_LIST.append(LIST_A[target_idx]) print(DESIRED_LIST) # 输出结果:['WNW', 'SW', 'NNE', 'N', 'ENE', 'SSW']
代码解释
- 遍历
LIST_B中的每个方向,用LIST_A.index(dir)获取其在完整列表中的位置 - 相反方向的位置通过原索引加8后取模16得到,确保索引不会超出列表范围
- 顺时针递增一步只需在相反方向索引基础上加1再取模16,适配环形方向结构
- 最后将对应索引的方向添加到结果列表即可
内容的提问来源于stack exchange,提问作者GDog
相关产品推荐
相关产品推荐

