python中一个范围怎么表示_我应该如何处理Python中的包含范围?
我在一個領域工作,在這個領域中,范圍通常被包括在內地描述。我有人類可讀的描述,例如from A to B,它表示包含兩個端點的范圍,例如from 2 to 4表示2, 3, 4。
在Python代碼中使用這些范圍的最佳方法是什么?以下代碼可用于生成包含范圍的整數,但我還需要執行包含切片操作:def inclusive_range(start, stop, step):
return range(start, (stop + 1) if step >= 0 else (stop - 1), step)
我看到的唯一完整解決方案是每次使用+ 1(或- 1)或切片表示法(例如range(A, B + 1)、l[A:B+1]、range(B, A - 1, -1))時顯式使用+ 1(或- 1)。這種重復真的是處理包含范圍的最佳方法嗎?
編輯:感謝L3viathan的回答。寫一個inclusive_slice函數來補充inclusive_range當然是一個選項,盡管我可能會這樣寫:def inclusive_slice(start, stop, step):
...
return slice(start, (stop + 1) if step >= 0 else (stop - 1), step)
這里的...表示處理負索引的代碼,這在與切片一起使用時并不簡單-注意,例如,如果slice_to == -1,l3viaan的函數會給出不正確的結果。
然而,似乎一個inclusive_slice函數會很難使用-l[inclusive_slice(A, B)]真的比l[A:B+1]更好嗎?
有沒有更好的方法來處理包含的范圍?
編輯2:感謝您提供新答案。我同意Francis和Corley的觀點,即改變slice操作的含義,無論是全局的還是某些類的,都會導致嚴重的混淆。因此,我現在傾向于編寫一個inclusive_slice函數。
為了回答我之前編輯的問題,我得出的結論是,使用這樣的函數(例如l[inclusive_slice(A, B)])比手動加/減1(例如l[A:B+1])要好,因為它允許在一個地方處理邊案例(例如B == -1和B == None)。我們能減少使用這個函數時的尷尬嗎?
編輯3:我一直在考慮如何改進用法語法,它目前看起來像l[inclusive_slice(1, 5, 2)]。特別是,如果創建的包含切片類似于標準切片語法,那將是很好的。為了允許這樣做,而不是inclusive_slice(start, stop, step),可能有一個函數inclusive將切片作為參數。inclusive的理想用法語法是行1:l[inclusive(1:5:2)] # 1
l[inclusive(slice(1, 5, 2))] # 2
l[inclusive(s_[1:5:2])] # 3
l[inclusive[1:5:2]] # 4
l[1:inclusive(5):2] # 5
不幸的是,Python不允許這樣做,它只允許在[]中使用:語法。inclusive因此必須使用語法2或3調用(其中s_的作用類似于the version provided by numpy)。
其他的可能性是使inclusive成為一個具有__getitem__的對象,允許語法4,或者只將inclusive應用于切片的stop參數,如語法5。不幸的是,我不相信后者能夠工作,因為inclusive需要了解step值。
在可行的語法中(原始的l[inclusive_slice(1, 5, 2)],加上2,3和4),哪一個是最好的?或者還有其他更好的選擇嗎?
最后編輯:感謝大家的回復和評論,這非常有趣。我一直都是Python“單向”哲學的粉絲,但這個問題是由Python的“單向”和問題領域所禁止的“單向”之間的沖突引起的。我確實對語言設計中的TIMTOWTDI有些欣賞。
因為我給出了第一個也是最高票數的答案,所以我把獎金頒給了L3viathan。
總結
以上是生活随笔為你收集整理的python中一个范围怎么表示_我应该如何处理Python中的包含范围?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将一个向量投影到一个平面上_Came
- 下一篇: vba读取csv文件到excel_利用V