jac*_*ckd 14 python initialization list range
我想要一个长列表,例如[1,2,3,4,5,15,16,17,18,19].要初始化这个,我尝试输入:
new_list = [range(1,6),range(15,20)]
Run Code Online (Sandbox Code Playgroud)
然而,这不符合我的要求,返回:
[[1, 2, 3, 4, 5], [15, 16, 17, 18, 19]]
Run Code Online (Sandbox Code Playgroud)
当我做:
len(new_list)
Run Code Online (Sandbox Code Playgroud)
它返回2,而不是我想要的10个元素(因为它在列表中创建了2个列表).显然在这个例子中我可以输入我想要的内容,但我正在尝试为一些奇怪的迭代列表执行此操作,如下所示:
new_list = [range(101,6284),8001,8003,8010,range(10000,12322)]
Run Code Online (Sandbox Code Playgroud)
需要1-D列表而不是列表列表(或者最好调用的列表).我猜这真的很容易,而且我很想念它,但经过相当多的搜索后,我没有想出任何有用的东西.有任何想法吗?
Ósc*_*pez 22
试试这个Python 2.x:
range(1,6) + range(15,20)
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是Python3.x,请尝试以下操作:
list(range(1,6)) + list(range(15,20))
Run Code Online (Sandbox Code Playgroud)
对于处理中间的元素,对于Python 2.x:
range(101,6284) + [8001,8003,8010] + range(10000,12322)
Run Code Online (Sandbox Code Playgroud)
最后,为了处理Python 3.x之间的元素:
list(range(101,6284)) + [8001,8003,8010] + list(range(10000,12322))
Run Code Online (Sandbox Code Playgroud)
这里要记住的关键方面是在Python 2.x中range返回一个列表,在Python 3.x中它返回一个可迭代的(因此它需要显式转换为列表).并且为了将列表附加在一起,您可以使用+运算符.
您可以使用itertools.chain来平展range()调用的输出.
import itertools
new_list = list(itertools.chain(xrange(1,6), xrange(15,20)))
Run Code Online (Sandbox Code Playgroud)
使用xrange(或简单地range()用于python3)获取可迭代并将它们链接在一起意味着只创建一个列表对象(不需要中间列表).
如果需要插入中间值,只需在链中包含一个列表/元组:
new_list = list(itertools.chain((-3,-1),
xrange(1,6),
tuple(7), # make single element iterable
xrange(15,20)))
Run Code Online (Sandbox Code Playgroud)