2016-10-31 7 views
0

スタック上の答えを探していましたが、正解を見つけることができませんでした。新しいリストを別の2つのリストの値で埋める方法

私は2つのリストました:

keys = ['banana', 'orange'] 
values = [3, 5] 

をそして私はそのようなことのように見える新しいリストを作りたい:

newlist = ['banana', 'banana', 'banana', 'orange', 
    'orange', 'orange', 'orange', 'orange'] 
+1

ブレイク:どのように 'keys'と' values'、そしてどのように各文字列を繰り返すをペアリングします。まだ何か試しましたか? –

+0

はい、私は何回も試みましたが、うまくいきませんでした。ループのために2つを使用しました。 – George

+0

@MartijnPietersたぶんあなたにとっては簡単ですし、助けてもらえますか? – George

答えて

0

あなたは(value, key)オーバーペアを反復するzipを使用することができます。

out = [] 
for e in zip(values, keys): 
    out.extend(e[0] * [e[1]]) 

それはnested list comprehensionsを使用して、forループなしも可能です:

[y for x in zip(values, keys) for y in x[0] * [x[1]]] 
0

は簡単にそれらの間でこれらの値を乗算するラムダを使用してください。私たちは、むしろ、文字列の乗算とを取得しないために、角括弧内lambdaに与えられたvaluesから値(x)を囲む必要があり

newlist = list(map(lambda x, y: [x] * y, keys, values)) 

:あなたのラムダは、乗算を2つの引数、各配列からの1を取得して返します。

これは、その結果:サブ問題にあなたの問題ダウン

[['banana', 'banana', 'banana'], 
['orange', 'orange', 'orange', 'orange', 'orange']] 
関連する問題