用python中的循环填充数组

用python中的循环填充数组,python,Python,我的问题如下,我有一个名为crave=['word1','word2','word3','wordx']的数组,我想转换成ITEM=[['word1','word2','word3',['word4','word5','word6']等] 我使用了以下代码 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]=c

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

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']等等]

为什么会发生这种情况?:(

您可以通过使用列表理解轻松做到这一点。
xrange(0,len(crave),3)
用于以3的间隔从0迭代到len(crave)。然后我们使用
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']]
试试这个

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

关于“为什么会发生这种情况”的问题:

问题是buff[0]被.insert引用,而不是被复制。因此,在下一个循环中,当buff更改时,引用buff的任何内容也将更改

要进行显式复制,请使用list()


因此,您想将列表拆分为3个元素子列表?排序重要吗?我试图了解您的代码的功能,我不得不更改一些行以使其编译和运行。以下是我对它的理解:是的,排序很重要,特别是对最后一个(“断开”)三元组的处理-它确实有效:-)感谢感谢@Wolf。。。解释;-)
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
 ITEM.insert(len(ITEM),list(buff[0]))