我正在嘗試使用其中的數字1-1000
作出列表。很顯然,這將會令人討厭寫/閱讀,所以我試圖用範圍來製作一個列表。在Python 2似乎是:Python 3將範圍轉到列表
some_list = range(1,1000)
會工作,但在Python 3的範圍是類似的Python 2的xrange
?
任何人都可以提供一些見解?
我正在嘗試使用其中的數字1-1000
作出列表。很顯然,這將會令人討厭寫/閱讀,所以我試圖用範圍來製作一個列表。在Python 2似乎是:Python 3將範圍轉到列表
some_list = range(1,1000)
會工作,但在Python 3的範圍是類似的Python 2的xrange
?
任何人都可以提供一些見解?
你真的不應該需要在列表中使用數字1-1000。但是,如果由於某種原因,你真的需要這些數字,那麼你可以做:
[i for i in range(1, 1001)]
列表綜合概括地說:
上面所列內容理解翻譯爲:
nums = []
for i in range(1, 1001):
nums.append(i)
這是隻是列表理解的語法,雖然從2.x.我知道這將在python 3中工作,但我不確定是否還有升級的語法
範圍開始包含第一個參數;但最終要,不包括第二個參數(如果提供2個參數;如果第一個參數都不放過,它會在「0」開頭)
range(start, end+1)
[start, start+1, .., end]
爲什麼理解?只是:'列表(範圍(1000))' – 2012-07-14 00:48:44
謝謝!你介意解釋爲什麼它是我在我...而不是簡單地爲我在? – Boathouse 2012-07-14 00:50:13
我還沒有用過python3。所以我不完全肯定它是如何工作的。我知道理解會起作用,但並非100%投射。但是,如果施法有效,那麼你是對的,你的方式更加pythonic。 – inspectorG4dget 2012-07-14 00:51:22
您可以直接構建在一個列表範圍對象:
my_list=list(range(1,1001))
這就是你如何使用python2.x中的生成器來做到這一點。通常來說,您可能不需要列表,因爲您可以更有效地得到my_list[i]
的值(i+1
),如果您只需要遍歷它,則可以回退到range
。
另請注意,在python2.x上,xrange
仍可編入索引。這意味着,range
上python3.x也具有同樣的性質
print xrange(30)[12]
作品python2.x
中類似的語句來向python3.x 是print(range(30)[12])
,這也適用。
其實,如果你想1-1000(含),使用range(...)
功能與參數1和1001:range(1, 1001)
,因爲range(start, end)
功能去從開始到(結束-1),包容性。
在Python 3.x中,range()
函數有它自己的類型。所以在這種情況下,你必須使用迭代器
list(range(1000))
「在這種情況下,你必須使用迭代器」?這應該是什麼意思? – user2357112 2017-11-02 23:56:09
在蟒蛇< = 3。4您可以像其他人所建議的那樣,使用list(range(10))
來使列表超出一個範圍(一般來說,任何可迭代的)。
另一種選擇,在Python 3.5
其拆包概括介紹,是由文字列表[]
使用*
:
>>> r = range(10)
>>> l = [*r]
>>> print(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
雖然這是相當於list(r)
,它的字面語法和事實,沒有函數調用所涉及的是讓它更快地執行。這也是更少的字符,如果你需要:-)
爲了清楚起見,你仍然可以單行:'[* range(10)]'適用於當你不需要'範圍'用於任何目的而是初始化'list'時。附註:我最喜歡的(可以,不是真正的)解包概括的一部分是空的'set's現在有一個字面語法,'{*()}',或者我稱之爲單眼猴子操作符。 ;-) – ShadowRanger 2017-11-03 00:08:57
@ShadowRanger這就是我最初的想法。爲了不使新的Python用戶感到困惑,我決定稍微詳細一點:-) – 2017-11-03 00:12:10
事實上代碼高爾夫,這是因爲相比於Python2 Python3的復古漸變。當然,使用range()和xrange()的Python2比分別使用list(range())和range()的Python3更方便。原因是因爲Python3的原始設計者並不是很有經驗,他們只考慮許多初學者使用範圍函數來迭代大量元素,因爲它既是內存又是CPU效率低下;但他們忽略了使用範圍函數來產生一個數字列表。現在,他們已經很晚了。
如果我是Python3的設計師,我會:
這應該是最佳的。
只是不,爲什麼你實際上需要從1到1000的1000個數字的合約清單?使用範圍,只要你需要這樣的清單。 – 2012-07-14 00:46:49
也有'some_list [i] == i + 1',所以你可能並不需要列表。 – njzk2 2014-06-06 15:45:47
@RikPoggi。例如,可能需要爲繪圖功能提供一個列表。有時候一個範圍就足夠了,但是一個範圍不能被連接(是不可變的),所以如果你需要爲所有被繪製的列表添加一個默認的起始值,那麼這個值也需要變成一個列表。 – SherylHohman 2017-04-14 13:40:42