2015-05-26 69 views
2
循環數組

我的問題如下,我有一個數組命名crave=['word1','word2','word3'....'wordx'],我想轉換爲ITEM=[['word1','word2','word3'],['word4','word5','word6'] etc] 我用下面的代碼填充在python

buff=[['none','none','none']] 
n=10 
ITEM=[] 
i=0 
while 1>0 : 


buff[0][0]=crave[i] 
buff[0][1]=crave[i+1] 
buff[0][2]=crave[i+2] 
ITEM.insert(len(ITEM),buff[0]) 
i=i+3 
if i>n: 
     break 

但我得到的卻是[['wordx-2','wordx-1','wordx'],['wordx-2','wordx-1','wordx'],['wordx-2','wordx-1','wordx']etc] 爲什麼會發生這種情況?:(

+0

所以你想要將列表拆分爲3個元素子列表?訂購重要嗎? – Moj

+1

我試圖理解你的代碼的作用,爲了讓它編譯和運行,我不得不修改一些代碼行。這是我所做的:https://ideone.com/bHuDx2 – Wolf

+0

是的訂購是重要的Moj –

回答

8

您可以輕鬆地通過使用列表中理解這一點。 xrange(0, len(crave), 3)用於從0與3的間隔重複,以LEN(渴望),然後我們使用list slicingcrave[i:i+3]來提取所需的數據。

crave=['word1','word2','word3','word4','word5','word6','word7'] 

ITEM = [crave[i:i+3] for i in xrange(0, len(crave), 3)] 

print ITEM 
>>> [['word1', 'word2', 'word3'], ['word4', 'word5', 'word6'], ['word7']] 
+0

非常感謝:) –

+1

有趣的,尤其是最後(「破」)三重處理 - 它真的起作用:-) https://ideone.com/S9AQF7 – Wolf

+0

感謝讚賞@Wolf – ZdaR

1
import numpy as np 
In [10]: a =np.arange(20) 

In [11]: a 
Out[11]: 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
     17, 18, 19]) 

In [12]: np.array_split(a,len(a)/3) 
Out[12]: 

[array([0, 1, 2, 3]), 
array([4, 5, 6, 7]), 
array([ 8, 9, 10]), 
array([11, 12, 13]), 
array([14, 15, 16]), 
array([17, 18, 19])] 
+0

謝謝先生^^ –

1

嘗試這個。

crave = ['word1', 'word2', 'word3', 'word4', 'word5', 'word6', 'word7'] 
li = [] 
for x in range(0, len(crave), 3): 
    li.append(crave[x:x+3]) 
print li 
+1

... [列表理解](http://www.secnetix.de/olli/Python/list_comprehensions.hawk)解釋; - ) – Wolf

1

在相對的「爲什麼會發生這種情況」的問題:

的問題是,BUFF [0]正在被.insert,不可複製引用。因此,在buff改變引用buff的任何東西時,下一回合的循環也會改變。

要做一個明確的複製使用列表()。例如。

ITEM.insert(len(ITEM),list(buff[0]))