我想要一个长列表,例如[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列表而不是列表列表(或者最好调用的列表)。我猜这真的很容易,而且我很想念它,但经过相当多的搜索后,我没有想出任何有用的东西。有什么想法吗?
答案 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