我想从列表中提取一些项目并将它们保存在子列表中,但项目不按顺序排列。例如,对于以下列表:
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.
答案 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);
。