2017-07-02 104 views
1

我有兩個數組:(arrayA包含整數和arrayB和arrayC包含字符串)數組和字符串操作

arrayA = [5, 4] 
arrayB = ["id_1", "id_2"] #arrayA and arrayB always have same lengths 
arrayC = ['3', '4', '15', '20', '23', '8', '11', '14', '21'] 

我想結果是:

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

所以基本上我想告訴程序arrayB的id_1包含前5個字符串,而arrayB的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

你可以試試:

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陣列BA。此壓縮過程相當於從BA創建一個新的列表,其形式與[("a", 2), ("b", 1), ("c", 3), ("d", 4)]類似。現在你已經有了這個壓縮容器,我們用for-loop進行迭代;因此也是for k, l in zip(B, A)的一部分。隨後,在每次迭代中,我們將從ixix + l的數組C切片;其中l是來自數組A的相應整數值。這個切片操作的數值使用數組B中的一個鍵保存在我們的res字典中。最後,我們將值ix增加l的值,以確保我們所做的下一個切片向前移動通過數組C

我希望這會有所幫助。

+0

謝謝你。你能解釋一下代碼嗎? for循環中發生了什麼以及zip函數是什麼? –

+0

這是如此精美和徹底解釋!非常感謝!我從來沒有工作過含有多個變量的循環,但現在我有了,它讓生活變得如此簡單!謝謝! –

1

你可以使用itertools.islice根據A提供的長度,以剝離部分的C。對於這個工作,你還需要做出C迭代器,因此片的地方開始最後的片不放過:

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

你的問題太寬泛了,因爲我不知道你已經知道了多少。如果關於該行的所有內容都是完整的謎題,那麼首先要閱讀[tutorial](https://docs.python.org/3/tutorial/),特別是[list comprehensions](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

非常感謝您提供參考!我一定會看看他們,問你是否還有其他問題! –