【问题标题】:Replacing all the elements of a list that are consecutive and duplicates in Python在 Python 中替换列表中连续和重复的所有元素
【发布时间】:2018-11-13 14:15:00
【问题描述】:

假设我有一个列表,其中包含一些重复的数字。

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 可以帮助您完成这项任务。
  • 旁注:从不在内置函数之后命名变量,例如使用lstlist_ 而不是list

标签: python python-3.x list duplicates


【解决方案1】:

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]

注意事项:

  1. 如果您想捕获可能的KeyErrors 并希望使用默认值,请使用mydict.get(k, <default>) 而不是mydict[k]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2020-12-24
    • 2019-08-01
    相关资源
    最近更新 更多