2017-02-14 84 views
2

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

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

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

回答

1

嵌套列表理解的工作太:

>>> 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

的代码是相当直接的,看在线评论

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()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'] 
相关问题