2017-01-01 24 views
0

我目前想下面的輸出:如何使用範圍製作其他值的列表?

[161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 13362, 13363, 13364, 13365, 13366, 13367, 13368, 13369, 13370, 13383, 13384, 11100, 667, 6503, 6506, 666] 

(以上精簡版:)

[161...172, 13362...13370, 13383, 13384, 11100, 667, 6503, 6506, 666] 

所以我想通了,做這樣的:

emoteIds = range(161, 173) 
for i in range(13362, 13371): 
    emoteIds.append(i) 
for i in [13383, 13384, 11100, 667, 6503, 6506, 666]: 
    emoteIds.append(i) 

不過,我覺得這可以被壓縮。我有什麼辦法可以將range()納入列表中,而不會在列表中創建另一個列表?我試過使用list()函數,但無濟於事。

+0

既然你可以用'追加()'*所有*我只能說明你正在使用Python 2在這裏,所以我就這樣標記了你的問題。 –

+0

我正在使用Python 3,但我沒有意識到太多。 –

+0

您發佈的代碼無法在Python 3中使用,因爲範圍對象有不可變的序列。他們不能被附加到。 –

回答

2

您不需要使用循環;正好連接列表對象:

emoteIds = range(161, 173) + range(13362, 13371) + [ 
    13383, 13384, 11100, 667, 6503, 6506, 666] 

(在Python 3,你不得不使用list()來電來range()對象轉換爲實際的列表)。

你也可以看看list.extend();你也可以使用:

emoteIds = range(161, 173) 
emoteIds.extend(range(13362, 13371)) 
emoteIds.extend([13383, 13384, 11100, 667, 6503, 6506, 666]) 

+=增量賦值,這可以歸結爲同樣的事情list.extend()這裏:

emoteIds = range(161, 173) 
emoteIds += range(13362, 13371)) 
emoteIds += [13383, 13384, 11100, 667, 6503, 6506, 666] 
+0

「itertools.chain」的任何建議? (美麗的帽子Martijn) –

+0

@LaurentLAPORTE:如果你還沒有3個列表對象,並且你只需要迭代,那麼這很有意義。在Python 3中,或者使用'xrange()',*和*所有你要做的就是迭代,然後使用'itertools.chain(range(...),range(...),[...])'是。 –

0

隨着numpy.r_,做的範圍內創造了引擎蓋下你 -

np.r_[161:173, 13362:13371, 13383, 13384, 11100, 667, 6503, 6506, 666] 

採樣運行 -

In [461]: np.r_[161:173, 13362:13371, 13383, 13384, 11100, 667, 6503, 6506, 666] 
Out[461]: 
array([ 161, 162, 163, 164, 165, 166, 167, 168, 169, 
     170, 171, 172, 13362, 13363, 13364, 13365, 13366, 13367, 
     13368, 13369, 13370, 13383, 13384, 11100, 667, 6503, 6506, 666]) 

如果你需要一個列表作爲輸出,使用.tolist()方法在最後 -

np.r_[161:173, 13362:13371, 13383, 13384, 11100, 667, 6503, 6506, 666].tolist() 
+0

如果你已經在使用numpy,那太好​​了。但如果你想要的只是一個清單.. –

相關問題