Python列表初始化使用多个范围语句

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中它返回一个可迭代的(因此它需要显式转换为列表).并且为了将列表附加在一起,您可以使用+运算符.


Sha*_*hin 8

您可以使用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)