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

使用多个范围语句初始化Python列表,python,list,initialization,range,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个列表)。显然,在本例中,我可以键入我想要的内容,但我尝试对一些奇怪的迭代列表执行此操作,

我想要一个长长的列表,比如[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列表而不是列表列表(或任何最好的名称)。我猜这真的很容易,我错过了它,但经过相当多的搜索,我没有找到太有用的东西。有什么想法吗?

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

或者,您可以使用
itertools.chain()

import itertools
new_list = list(itertools.chain(xrange(1,6), xrange(15,20)))
使用
xrange
(或者对于python3简单地使用
range()
)来获得一个iterable并将它们链接在一起意味着只创建一个list对象(不需要中间列表)

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

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

在Python2.x中尝试以下方法:

 range(1,6) + range(15,20)
range(101,6284) + [8001,8003,8010] + range(10000,12322)
或者,如果您使用的是Python3.x,请尝试以下方法:

list(range(1,6)) + list(range(15,20))
对于处理介于两者之间的元素,对于Python 2.x:

 range(1,6) + range(15,20)
range(101,6284) + [8001,8003,8010] + range(10000,12322)
最后,对于处理介于两者之间的元素,对于Python 3.x:

list(range(101,6284)) + [8001,8003,8010] + list(range(10000,12322))
这里需要记住的关键方面是,在Python2.x
range
中返回一个列表,在Python3.x中返回一个iterable(因此需要显式转换为列表)。对于附加在一起的列表,您可以使用
+
操作符。

尝试以下操作:

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] [1, 2, 3, 4, 5, 15, 16, 17, 18, 19]
我想向你推荐一个没有+

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

只需按如下方式解压缩范围值:

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

print(new_list)
# [1, 2, 3, 4, 5, 15, 16, 17, 18, 19]

print(len(new_list))
# 10

print(type(new_list))
# <class 'list'>

只需将
范围
值解压缩如下:

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

print(new_list)
# [1, 2, 3, 4, 5, 15, 16, 17, 18, 19]

print(len(new_list))
# 10

print(type(new_list))
# <class 'list'>
new_list=[*范围(1,6),*范围(15,20)]
打印(新列表)
# [1, 2, 3, 4, 5, 15, 16, 17, 18, 19]
打印(len(新列表))
# 10
打印(类型(新列表))
# 

+1对于非常简单高效的代码,我不知道只需将列表添加在一起就可以了!:有没有简单的方法在两个数字之间插入一个数字,全部放在一行中?我想我可以把每一条都加上,但是列表语句之间的间隔很少,谢谢你的帮助。@jackd更新了我的答案。只需将它们打包在一个元素列表中,就像这样:
range(1,3)+[3]+range(4,6)
您已经得到了它,我只是太慢了,没有注意到,谢谢这正是我需要的。很简单,就是找不到正确的关键字搜索来找到答案!要包含单个值,请确保它是iterable中的单个项,例如
元组(8001)
[8001]
列表(8001)
,否则它将添加
8
0
0
1
。谢谢,这绝对值得指出。将更新答案。请不要发布其他答案来更新现有答案。只要按一下按钮。在你已经发布之后,我建议删除这个。