提取列表中不按顺序排列的项目

时间:2016-05-16 14:28:17

标签: python

我想从列表中提取一些项目并将它们保存在子列表中,但项目不按顺序排列。例如,对于以下列表:

F = ['mary', 'zari', 'ali', 'fari','Thaghi', 'zagi', 'shad', 'sila','bita']
A = []
B = []
C = []

我想把项目1放在A中,项目2放在B中,项目3放在C中。然后是A中的项目4,B中的项目5,C中的项目6.然后是A中的项目7,B中的项目8和9在C.我写了以下代码:

i=0
for i in range(len(F)):  
    A.append(F[i])
    B.append(F[i+1])
    if i < range(len(F)): 
        i=i+1

但输出是:

A.append(F[i])
B.append(F[i+1])
     if i < range(len(F)):
         i=i+1

IndexError: list index out of range. 

2 个答案:

答案 0 :(得分:3)

代码中的问题是F[i+1]到达i时没有F。使用列表推导是解决此问题的更好方法:

F = ['mary', 'zari', 'ali', 'fari','Thaghi', 'zagi', 'shad', 'sila', 'bita']
A = [item for i, item in enumerate(F) if i % 3 == 0]
B = [item for i, item in enumerate(F) if i % 3 == 1]
C = [item for i, item in enumerate(F) if i % 3 == 2]

结果将是:

>>> A
['mary', 'fari', 'shad']
>>> B
['zari', 'Thaghi', 'sila']
>>> C
['ali', 'zagi', 'bita']

答案 1 :(得分:3)

这适用于任意长度的A, B, C = [F[i::3] for i in range(3)]

0, 1, 2

它分别从索引step开始生成三个切片,每个切片一直到结尾,每个切片的3长度为var desc = Object.getOwnPropertyDescriptor(a, 'x'); desc.writable = false; Object.defineProperty(a, 'x', desc);