['A'、 'B'、 'C'、 'D']と[1,2,3,4]というリストがあります両方のリストは常に同じ数の項目を持ちます。各文字列に番号を掛けなければならないので、探している最終製品は文字列のリストにint要素の要素リストを掛ける
[ D '、' D '、' D '、' D ']を含む。
ありがとうございます、ありがとうございます。
['A'、 'B'、 'C'、 'D']と[1,2,3,4]というリストがあります両方のリストは常に同じ数の項目を持ちます。各文字列に番号を掛けなければならないので、探している最終製品は文字列のリストにint要素の要素リストを掛ける
[ D '、' D '、' D '、' D ']を含む。
ありがとうございます、ありがとうございます。
ネストされたリストの内包は、あまりにも動作します:上記で
>>> 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
はを返すタプル:
>>> 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']
私は素敵な、効率的な実装のための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']
>>>
私もそれは非常に読みやすいと思います。
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)
出力:
コードは、インラインコメント
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
OUTPUT
['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']
あなたがこの方法のようにそれを行うにはzip()
を使用するを参照して、かなり単純です。
>>> ['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']