根据元素的位置从列表创建新列表

时间:2014-06-06 19:06:09

标签: python python-2.7

我有一个如下列表;

['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']

从上面创建3个新列表的最有效方法是什么?

['US', 'UK', 'Fra']
[20, 21, 23]
['en', 'en', 'fr']

4 个答案:

答案 0 :(得分:2)

切片和列表理解应该可以解决问题。它可能不是最有效的,但它简洁易读。

data = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
result = [ data[i::3] for i in range(3) ]

答案 1 :(得分:1)

在一个(有趣的)行中:

>>> l = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
>>> lists = [[l[3*i+j] for i in range(0, int(len(l)/3))] for j in range(0, 3)]
>>> lists
[['US', 'UK', 'Fra'], [20, 21, 23], ['en', 'en', 'fr']]

您只需要lists[0]lists[1]lists[2]

答案 2 :(得分:1)

您可以使用numpy

import numpy as np
DATA = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
x= np.array(DATA).reshape(3,len(DATA)/3).T.tolist() 

print x[0]
print x[1]
print x[2]

打印

['US', 'UK', 'Fra']
['20', '21', '23']
['en', 'en', 'fr']

答案 3 :(得分:0)

这不是最有效的方法,但您可以使用带有步骤参数的切片来实现它的可读性:

>>> l = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
>>> l[::3]
['US', 'UK', 'Fra']
>>> l[1::3]
[20, 21, 23]
>>> l[2::3]
['en', 'en', 'fr']