可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want one long list, say [1,2,3,4,5,15,16,17,18,19] as an example. To initialize this, I try typing:
new_list = [range(1,6),range(15,20)]
However this doesn't do what I want, returning:
[[1, 2, 3, 4, 5], [15, 16, 17, 18, 19]]
When I do:
len(new_list)
It returns 2, instead of the 10 elements I wanted (since it made 2 lists inside the list). Obviously in this example I could just type out what I want, but I'm trying to do this for some odd iterated lists that go like:
new_list = [range(101,6284),8001,8003,8010,range(10000,12322)]
Desiring a 1-D list instead of a list of lists (or whatever it's best called). I'm guessing this is really easy and I'm missing it, but after quite a bit of searching I've come up with nothing too useful. Any ideas?
回答1:
Try this for Python 2.x:
range(1,6) + range(15,20)
Or if you're using Python3.x, try this:
list(range(1,6)) + list(range(15,20))
For dealing with elements in-between, for Python 2.x:
range(101,6284) + [8001,8003,8010] + range(10000,12322)
And finally for dealing with elements in-between, for Python 3.x:
list(range(101,6284)) + [8001,8003,8010] + list(range(10000,12322))
The key aspects to remember here is that in Python 2.x range
returns a list and in Python 3.x it returns an iterable (so it needs to be explicitly converted to a list). And that for appending together lists, you can use the +
operator.
回答2:
You can use itertools.chain to flatten the output of your range()
calls.
import itertools
new_list = list(itertools.chain(xrange(1,6), xrange(15,20)))
Using xrange
(or simply range()
for python3) to get an iterable and chaining them together means only one list object gets created (no intermediate lists required).
If you need to insert intermediate values, just include a list/tuple in the chain:
new_list = list(itertools.chain((-3,-1),
xrange(1,6),
tuple(7), # make single element iterable
xrange(15,20)))
回答3:
range
returns a list to begin with, so you need to either concatenate them together with +
or use append()
or extend()
.
new_list = range(1,6) + range(15,20)
or
new_list = range(101,6284)
mew_list.extend([8001,8003,8010])
mew_list.extend(range(10000,12322))
Alternatively, you could use itertools.chain()
as shown in Shawn Chin's answer.
回答4:
Try this:
from itertools import chain
new_list = [x for x in chain(range(1,6), range(15,20))]
print new_list
Output like you wanted:
[1, 2, 3, 4, 5, 15, 16, 17, 18, 19]
回答5:
i would like to propose u a version without +
import operator
a = list(range(1,6))
b = list(range(7,9))
print(operator.concat(a,b))