2013-03-27 45 views
0

我有一個Python列表,我想檢查給定的索引是否超出範圍。由於我接受用戶輸入,我想限制索引的整數大於或等於0.什麼是最Python的方法來做到這一點?目前,這是我的解決方案:列表邊界 - 什麼是最Python的方式?

def get_current_setting(self, slot): 
    if slot < 0 or slot > len(self.current_settings) - 1: 
     raise Exception("Error message...") 
    return self.current_settings[slot] 

回答

2

爲什麼不試着訪問的價值,你會得到一個IndexError如果是出界。任何你想要做的檢查都是不尋常的,只需手動進行。

def get_current_settings(self, slot): 
    if slot < 0: 
     raise IndexError(...) 
    return self.my_list[slot] 
+0

由於負面索引是允許的,我想禁止。 – 2013-03-27 18:54:27

+0

@DylanKlomparens看到我的編輯,只是做檢查,並讓其餘部分正常處理。 – 2013-03-27 18:56:40

0

我這個替換你如果行:

if slot not in range(len(self.my_list)): 
+0

有趣的方法......但請注意,這將有O(n)的運行時間。 – 2013-03-27 19:07:12

+0

@tobias_k不在Python 3.x中,其中'range()'對象不是列表,而是特殊的迭代器。也就是說,我仍然認爲這樣做的可讀性要低得多,而且是多餘的 - 不需要檢查結束索引,因爲這樣做是可行的。 – 2013-03-27 20:17:02

1

在Python中,你可以做兩個檢查一次(上限和下限),使得如果條件更可讀:

def get_current_setting(self, slot): 
    if not 0 <= slot < len(self.current_settings): 
     raise Exception("Error message...") 
    return self.current_settings[slot] 
相關問題