我的问题如下,我有一个名为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]
为什么会这样?:(
答案 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;
})