在python中用循环填充数组

时间:2015-05-26 12:53:07

标签: python

我的问题如下,我有一个名为crave=['word1','word2','word3'....'wordx']的数组,我想转换为ITEM=[['word1','word2','word3'],['word4','word5','word6'] etc] 我使用了以下代码

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] 为什么会这样?:(

4 个答案:

答案 0 :(得分:8)

您可以使用列表理解轻松完成此操作。 xrange(0, len(crave), 3)用于从0到len(crave)迭代,间隔为3.然后我们使用list slicing crave[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']]

答案 1 :(得分:2)

尝试这个。

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

答案 2 :(得分: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])]

答案 3 :(得分:1)

关于"为什么会发生这种情况":

问题是.insert正在引用buff [0],而不是复制。因此在循环的下一个循环中,当buff改变任何引用buff的东西也会改变。

进行显式复制使用列表()。 E.g。

.attr("refX", function(d) {
    return d == "red" ? 0 : 10;
})