Python中如何清理重复位置列表项并生成完整位置值列表?
解决方案
需求1:保留重复位置的最后一个子列表
利用字典键的唯一性,遍历原列表时用位置元组作为键,后续重复的位置会自动覆盖之前的条目,最后提取字典的值即可得到去重后的列表:
tileNUMS = ['4', '2', '4', '4', '2', '3', '4', '2', '2', '4', '1', '2', '2', '4', '3', '2', '2', '4', '3', '2', '4', '4', '3', '4', '4', '4', '4', '4'] TileList = [tileNUMS[i:i+4] for i in range(0, len(tileNUMS), 4)] # 去重逻辑 unique_tiles = {} for tile in TileList: # 中间两个元素为位置,转成元组作为字典键(列表不可哈希,元组可以) position = (tile[1], tile[2]) unique_tiles[position] = tile # 需求1的结果 result1 = list(unique_tiles.values()) print(result1)
执行后输出:
[['4', '2', '4', '4'], ['2', '3', '4', '2'], ['2', '4', '1', '2'], ['4', '4', '3', '4'], ['4', '4', '4', '4']]
需求2:生成全位置列表(缺省值设为0)
先从去重后的列表构建位置-值映射,再遍历所有1-4的位置组合,用dict.get()方法自动处理缺省值:
# 构建位置到值的映射(这里取子列表首尾的任意一个值,示例中首尾一致) pos_value_map = {(tile[1], tile[2]): tile[0] for tile in result1} # 生成所有1-4的位置组合,组装成目标格式 all_pos_list = [ [x, y, pos_value_map.get((x, y), 0)] for x in ['1', '2', '3', '4'] for y in ['1', '2', '3', '4'] ] print(all_pos_list)
执行后输出(部分示例):
[['1', '1', 0], ['1', '2', 0], ['1', '3', 0], ['1', '4', 0], ['2', '1', 0], ['2', '2', 0], ['2', '3', 0], ['2', '4', '4'], ..., ['4', '4', '4']]
内容的提问来源于stack exchange,提问作者Kevin Jones
相关产品推荐
相关产品推荐

