python - 在 Python 中替换列表中连续和重复的所有元素
问题描述
假设我有一个列表,其中包含一些重复的数字。
list = [1,1,1,1,2,3,4,4,1,2,5,6]
我想识别列表中所有重复和连续的元素,包括第一个元素,即将列表中的所有元素替换为字典中的值:
mydict = {1: 'a', 4: 'd'}
list = ['a','a','a','a',2,3,'d','d',1,2,5,6]
因为我也想替换重复的第一个实例,所以我很困惑如何进行!
解决方案
itertools.groupby是你的朋友:
from itertools import groupby
mydict = {1: 'a', 4: 'd'}
A = [1,1,1,1,2,3,4,4,1,2,5,6]
res = []
for k, g in groupby(A):
size = len(list(g))
if size > 1:
res.extend([mydict[k]] * size) # see note 1
else:
res.append(k)
print(res) # -> ['a', 'a', 'a', 'a', 2, 3, 'd', 'd', 1, 2, 5, 6]
笔记:
- 如果你想捕获可能
KeyError
的 s 并有一个你想依赖的默认值,使用mydict.get(k, <default>)
而不是mydict[k]
推荐阅读
- php - PHP:在不改变 memory_limit 和 max_execution_time 的情况下读取和导出大数据
- python - Python中的os.makedirs问题没有创建子目录
- reactjs - React-final-form:警告:React 无法识别 DOM 元素上的“initialValues”道具
- python - Pandas_profiling-1.4.1 对有效数据集抛出 ZeroDivisionError ,哪个 pandas 版本稳定?
- c - 未能编译包含问题的 C 代码
- typescript - 为类对象赋值后出现“TypeError:XXXX 不是函数”
- python - Python os.listdir 没有给出一致的输出
- dart - Flutter:扫描 QR 阅读器的自定义 UI。请让我知道任何插件,以便我可以在扫描屏幕底部制作菜单
- sql-server - 将 Oracle SQL 开发人员连接到 Microsoft SQL Server 2017
- angular - 输入值时输入类型号限制范围0到1(十进制值可以加)