根据另一个列表中的值重复列表元素

Mar*_*iev 3 python list

我有两个清单:

nums = [2, 3, 5]
mylist = ["aaa", "bbb", "ccc"]
Run Code Online (Sandbox Code Playgroud)

我想要实现的是重复每个元素的mylist次数与nums. 预期输出为:

["aaa", "aaa", "bbb", "bbb", "bbb", "ccc", "ccc", "ccc", "ccc", "ccc"]
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 6

想到了几种解决方案。

带计数器的高级代码

最简单的方法是对collections.Counter使用elements()方法:

>>> from collections import Counter
>>> nums = [2, 3, 5]
>>> mylist = ["aaa", "bbb", "ccc"]
>>> list(Counter(dict(zip(mylist, nums))).elements())
['aaa', 'aaa', 'bbb', 'bbb', 'bbb', 'ccc', 'ccc', 'ccc', 'ccc', 'ccc']
Run Code Online (Sandbox Code Playgroud)

带有 itertools 的函数式 C 速度代码

或者你可以直接使用itertools 模块

>>> from itertools import chain, repeat
>>> list(chain.from_iterable(map(repeat, mylist, nums)))
['aaa', 'aaa', 'bbb', 'bbb', 'bbb', 'ccc', 'ccc', 'ccc', 'ccc', 'ccc']
Run Code Online (Sandbox Code Playgroud)

母语语法(无库)

要在没有库的情况下做到这一点,嵌套列表理解就足够了:

>>> [elem for n, elem in zip(nums, mylist) for i in range(n)]
['aaa', 'aaa', 'bbb', 'bbb', 'bbb', 'ccc', 'ccc', 'ccc', 'ccc', 'ccc']
Run Code Online (Sandbox Code Playgroud)