我有以下场景。
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/