python - 如何在Python中为列表中的每个连续重复元素赋值?

标签 python list duplicates

我有以下场景。

list1=['10/22/2017 10:00','10/22/2017 10:00','10/22/2017 10:00',
       '10/22/2017 11:00','10/22/2017 11:00','10/22/2017 11:00',
       '10/22/2017 12:00','10/22/2017 12:00','10/22/2017 12:00',
        ....
      ]
list2 = [1,2,5,4,5,3,3,5,6,......] #(list2 size will be equal to no. of unique elements of list1)

我的问题是如何显示具有如下值的 list3。

list3=[1,1,1,
       2,2,2,
       5,5,5,
       ...]

表示没有。 list1 的连续重复元素,每个 list2 元素应该被追加到 list3 中很多次。

最佳答案

您可以使用itertools.groupy来实现这一目标。

from itertools import groupby

list1 = ['a', 'a', 'a', 'b', 'c', 'c']
list2 = [1, 2, 5]

sum(([i] * len(list(g)) for (k, g), i in zip(groupby(list1), list2)), [])
# [1, 1, 1, 2, 5, 5]

这会将 list1 分组为相等元素的 block (实际上这些 block 本身是 [key, chunk-generator] 对),将这些 block 与 list2 中的相应项目进行压缩,并使用 block 的长度和 list2 中的项目进行组装最终列表,使用旧的 sum(lists, []) 技巧,这不是展平列表列表的最佳方法,但非常简洁。如果性能很重要,请使用嵌套理解:

[x for l in ((i for _ in g) for (_, g), i in zip(groupby(list1), list2)) for x in l]

关于python - 如何在Python中为列表中的每个连续重复元素赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46939059/

相关文章:

python - 如何根据索引位置将列表列表连接到另一个小列表?

python - Django-import-export before_import_row 自动创建对象(如果不存在)

java - 如何使用 Java 中的辅助数组从列表中删除重复项?

javascript - 根据属性值删除对象数组中的重复项

python - 颜色和特征分类opencv

python - 如何将字符串转换为字典或列表?

javascript - 无序列表 "merging"通过递归函数问题

list - 在流中使用嵌套结构的 Getter

python - pandas:将具有相同值的连续行分组为一组

java - hadoop mapreduce 中的重复项