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

时间:2012-12-19 19:15:59

标签: python list initialization range

我想要一个长列表,例如[1,2,3,4,5,15,16,17,18,19]。要初始化它,我尝试输入:

new_list = [range(1,6),range(15,20)]

然而,这不符合我的要求,返回:

[[1, 2, 3, 4, 5], [15, 16, 17, 18, 19]]

当我这样做时:

len(new_list)

它返回2,而不是我想要的10个元素(因为它在列表中创建了2个列表)。显然在这个例子中,我可以输入我想要的内容,但我正在尝试为一些奇怪的迭代列表执行此操作,如下所示:

new_list = [range(101,6284),8001,8003,8010,range(10000,12322)]

需要1-D列表而不是列表列表(或者最好调用的列表)。我猜这真的很容易,而且我很想念它,但经过相当多的搜索后,我没有想出任何有用的东西。有什么想法吗?

7 个答案:

答案 0 :(得分:21)

试试Python 2.x:

 range(1,6) + range(15,20)

或者如果您使用的是Python3.x,请尝试以下方法:

list(range(1,6)) + list(range(15,20))

用于处理中间的元素,对于Python 2.x:

range(101,6284) + [8001,8003,8010] + range(10000,12322)

最后用于处理中间的元素,对于Python 3.x:

list(range(101,6284)) + [8001,8003,8010] + list(range(10000,12322))

要记住的关键方面是在Python 2.x中range返回一个列表,在Python 3.x中它返回一个可迭代的(因此需要将其显式转换为列表)。要将列表附加在一起,您可以使用+运算符。

答案 1 :(得分:8)

您可以使用itertools.chain来平展range()来电的输出。

import itertools
new_list = list(itertools.chain(xrange(1,6), xrange(15,20)))

使用xrange(或简称range()用于python3)获取可迭代并将它们链接在一起意味着只创建一个列表对象(不需要中间列表)。

如果您需要插入中间值,只需在链中包含一个列表/元组:

new_list = list(itertools.chain((-3,-1), 
                                xrange(1,6), 
                                tuple(7),  # make single element iterable
                                xrange(15,20)))

答案 2 :(得分:2)

range会返回一个列表,因此您需要将它们与+连接在一起,或者使用append()extend()

new_list = range(1,6) + range(15,20)

new_list = range(101,6284)
mew_list.extend([8001,8003,8010])
mew_list.extend(range(10000,12322))

或者,您可以使用itertools.chain(),如Shawn Chin的回答所示。

答案 3 :(得分:1)

试试这个:

from itertools import chain

new_list = [x for x in chain(range(1,6), range(15,20))]
print new_list

输出就像你想要的那样:

[1, 2, 3, 4, 5, 15, 16, 17, 18, 19]

答案 4 :(得分:1)

只需解压缩A1:A5值,如下所示:

range

答案 5 :(得分:0)

我想建议你一个没有+

的版本
import operator
a = list(range(1,6))
b = list(range(7,9))
print(operator.concat(a,b))

答案 6 :(得分:0)

只需解压缩范围值如下:

>>> new_list = [*range(1,6),*range(15,20)]
>>> new_list
[1, 2, 3, 4, 5, 15, 16, 17, 18, 19]
>>> len(new_list)
10