将一个字符串列表乘以int,逐个元素列表

时间:2017-02-14 01:57:19

标签: python

我有一个[' A',' B',' C',' D']和[1,2]的列表,3,4,两个列表将始终具有相同数量的项目。我需要将每个字符串乘以它的数字,所以我要找的最终产品是:

[' A',' B',' B',' C',' C',& #39; C',' D',' D',' D',' D']。

任何帮助将不胜感激,谢谢。

4 个答案:

答案 0 :(得分: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 :(得分: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']
>>>

我也认为它非常易读。

答案 2 :(得分: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']

答案 3 :(得分: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()list comprehension

来实现
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']