2017-07-02 21 views
1

私は、2つの配列を持っている配列と文字列操作

res = {"id_1": ['3', '4', '15', '20', '23'], 
     "id_2": ['8', '11', '14', '21']} 

はとても基本的に、私はプログラムに伝えたいこと配列Bのid_1には最初の5文字列が含まれ、配列Bのid_2には次の4文字列が含まれます。

同様に、次のような問題からの結果は次のようになります

A = [2, 1, 3, 4] 
B = ["a", "b", "c", "d"] 
C = ['23', '8', '11', '3', '4', '15', '20', '23', '100', '45'] 

res = {"a": ['23', '8'], 
     "b": ['11'], 
     "c": ['3', '4', '15'], 
     "d": ['20', '23', '100', '45']} 

答えて

2

をあなたが試すことができます:これが機能するために最後のスライスが中断したところ、あなたはまた、スライスが開始するようCイテレータを作成する必要があります

A = [2, 1, 3, 4] 
B = ["a", "b", "c", "d"] 
C = ['23', '8', '11', '3', '4', '15', '20', '23', '100', '45'] 


res = {} 
ix = 0 
for k, l in zip(B, A): 
    res[k] = C[ix:(ix+l)] 
    ix += l 

print(res) 

# {'a': ['23', '8'], 'b': ['11'], 'c': ['3', '4', '15'], 'd': ['20', '23', '100', '45']} 

このソリューションは次のように機能します。

まず、という辞書を作成しますに結果を記録します。次に、ixという変数を作成し、それを0に設定します。この変数は、配列Cのインデックスをどこに格納して、結果ディクショナリに望ましい値を取得するのに役立ちます。さらに、zipアレイBおよびA。この圧縮プロセスは、BAのタプルの新しいリストを作成することに相当します。[("a", 2), ("b", 1), ("c", 3), ("d", 4)]のようになります。この圧縮されたコンテナがあるので、for-loopで繰り返します。したがってfor k, l in zip(B, A)の部分です。続いて、すべての反復で、配列Cixからix + lにスライスします。 lは、配列Aの対応する整数値です。このスライス操作の値は、配列Bのキーを使用してres辞書に保存されます。最後に、ixという値をlの値だけインクリメントして、次のスライスが配列Cを順方向に移動することを確認します。

こちらがお役に立てば幸いです。

+0

ありがとうございます。あなたもコードを説明してくださいできますか? forループで何が起こっているのか、そしてジップ関数は何ですか? –

+0

これはとても美しくて完全に説明されました!どうもありがとうございます!私は1つ以上の変数を含むループのために働いたことはありませんが、今私は持っているので、それははるかに簡単に人生を作った!ありがとうございました! –

1

あなたはAによって提供される長さに応じてCの部分を剥離するitertools.isliceを使用することができます。

import itertools as IT 
A = [2, 1, 3, 4] 
B = ["a", "b", "c", "d"] 
C = ['23', '8', '11', '3', '4', '15', '20', '23', '100', '45'] 
C = iter(C) 
result = {bi: list(IT.islice(C, ai)) for ai, bi in zip(A, B)} 
print(result) 

利回り

{'b': ['11'], 
'c': ['3', '4', '15'], 
'd': ['20', '23', '100', '45'], 
'a': ['23', '8']} 
+0

ありがとうございます。私はitertoolsを以前に使用したことはありません。コードの各行を説明していただけますか? –

+0

あなたはすでに知っているか分からないので、あなたの質問は広すぎます。行のすべてが完全な謎である場合、開始する場所は[チュートリアル](https://docs.python.org/3/tutorial/)、特に[リスト内包表記](https: /docs.python.org/3/tutorial/datastructures.html#list-comprehensions)、[辞書](https://docs.python.org/3/tutorial/datastructures.html#dictionaries)、[zip](https ://docs.python.org/3/library/functions.html#zip)、および 'islice'です。より具体的な質問があれば、私は説明してうれしいです。 – unutbu

+0

リファレンスを提供してくれてありがとう!私は間違いなくそれらを見て、さらに質問がある場合はあなたに尋ねます! –