从另一个列表中逐个元素将字符串列表中的字符串乘以数字

4

我有两个列表,['A', 'B', 'C', 'D'][1, 2, 3, 4]。这两个列表的项目数始终相同。我需要将每个字符串乘以其数字,因此我要寻找的最终产品是:

['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

这个回答解决了您的问题吗?在一个列表中,重复另一个列表中的每个项目特定次数 - Georgy
5个回答

2

嵌套列表推导式也可以使用:

>>> l1 = ['A', 'B', 'C', 'D'] 
>>> l2 = [1, 2, 3, 4]
>>> [c for c, i in zip(l1, l2) for _ in range(i)]
['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

在上面的代码中,zip 返回一个由 (char, count) 元组组成的列表:
>>> t = list(zip(l1, l2))
>>> t
[('A', 1), ('B', 2), ('C', 3), ('D', 4)]

然后对于每个元组,第二个for循环会执行count次,将字符添加到结果中:

>>> [char for char, count in t for _ in range(count)]
['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

1

对于一个好的、高效的实现,我会使用 itertools.repeat

>>> letters = ['A', 'B', 'C', 'D']
>>> numbers = [1, 2, 3, 4]
>>> import itertools
>>> result = []
>>> for letter, number in zip(letters, numbers):
...     result.extend(itertools.repeat(letter, number))
...
>>> result
['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']
>>>

我认为它非常易读。

0
你可以使用NumPy,然后将NumPy数组转换为列表:
letters = ['A', 'B', 'C', 'D']
times = [1, 2, 3, 4]
np.repeat(letters, times).tolist()

#output

['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

0

代码非常直观,查看内联注释即可

l1 = ['A', 'B', 'C', 'D'] 
l2 = [1, 2, 3, 4]
res = []
for i, x in enumerate(l1): # by enumerating you get both the item and its index
    res += x * l2[i] # add the next item to the result list
print res

输出

['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

0

您可以使用zip()来实现:

a = ['A', 'B', 'C', 'D']
b = [1, 2, 3, 4]

final = []
for k,v in zip(a,b):
    final += [k for _ in range(v)]

print(final)

输出:

>>> ['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

或者你也可以使用 zip()列表推导式 来完成:

a = ['A', 'B', 'C', 'D']
b = [1, 2, 3, 4]
final = [k for k,v in zip(a,b) for _ in range(v)]
print(final)

输出:

>>> ['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接