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

Python 根据元素的位置从列表创建新列表,python,python-2.7,Python,Python 2.7,我有一份清单如下 ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr'] 以下哪种方法是从上面创建3个新列表的最有效方法 ['US', 'UK', 'Fra'] [20, 21, 23] ['en', 'en', 'fr'] 在单个(有趣的)行中: 您只需获取列表[0],列表[1]和列表[2],就可以使用numpy import numpy as np DATA = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 2

我有一份清单如下

['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
以下哪种方法是从上面创建3个新列表的最有效方法

['US', 'UK', 'Fra']
[20, 21, 23]
['en', 'en', 'fr']
在单个(有趣的)行中:


您只需获取
列表[0]
列表[1]
列表[2]
,就可以使用
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']

这不是最有效的方法,但您可以使用带有step参数的切片来实现以下目的,使其具有相当的可读性:

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

切片和列表理解应该可以做到这一点。严格来说,它可能不是最有效的,但它简洁易读

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

或者要实际创建请求的列表,
[l[::3]、l[1::3]、l[2::3]
@aestrivex问题只提到创建三个列表,而不是列表列表。我没有否决,但这个问题可能被否决,因为它是一个虚拟的重复——也就是说,它不需要进行广泛的搜索来提供答案,而不是提出问题。否决票通常是缺乏研究的结果。你有没有自己尝试过任何东西,并确定它对于你的需求来说太慢了?我知道的唯一方法就是运行循环并获得新的列表。我想这是个面子问题。但仍然…范围(0,len(l),3)内的i的内部列表
[l[i+j]
确实很清晰!我不知道
range
函数的第三个参数。
data = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
result = [ data[i::3] for i in range(3) ]