2012-11-16 37 views
0

我的代碼是給列表中的名字分配值。我需要知道如何檢索或設置默認值,如果我的列表中沒有條目分配給其中一個名稱。到目前爲止我的代碼:如何檢查Python中的數組/列表中是否存在條目?

array =[[a],[b],[c],[d]] 
no1 = array[0] 
no2 =array[1] 
no3 =array[2] 
no4 =array[3] 
# if array[4] exists: 
    no5 = array[4] 
else 
    no5 = 0 

我tried-

try: 
    array[4] 
except ValueError: 
    no5 = 0 

但它想出了爲數組[4]超出範圍。

只是爲了澄清,因爲我的代碼寫得不是很好,基本上我給了一個程序的三個不同的輸入,它應該讀取這些輸入,然後將輸出寫入文件。 問題是所有的輸入都有不同的數組長度。所以我試圖做的是以某種方式讓程序檢查是否有(說)數組[4]的條目,如果該條目不存在,創建條目數組[4]並使其等於零。

+0

對你想要做什麼有點困惑,請嘗試重新格式化你的代碼,使其更容易閱讀!我可以說,'超出範圍'的錯誤是由於你稱爲列表的第5個元素(4的索引),當只有4個元素 –

+0

nvm關於重新格式化 –

+4

列表中的項目是你不必爲它們命名。這是編程方面的一個重要層面。 –

回答

1

你去try和/ except是好的。如果你有IndexError那麼你真的很接近,你只是在你的except中發現錯誤類型的錯誤。這已經工作:

try: 
    no5 = array[4] 
except IndexError: 
    no5 = 0 
1

你應該抓住IndexError(實際誤差由array[4]被提出),而不是ValueError

0

,而不是try你也可以檢查數組

def: elem_exists(arr, idx): 
    return 0 <= ldx < len(arr) 
0

您正在試圖趕上了錯誤的異常類型

try: 
    no5 = array[4] 
except IndexError: 
    no5 = 0 

此一記漂亮的一個在線解決方案是使用的長度itertools

import itertools 
(no1,no2,no3,no4,no5),_ = zip(*itertools.izip_longest(array[:5],range(5),fillvalue=0)) 
0

爲什麼不能像t他繼續?

if len(array) > 4: 
    no5 = array[4] 
else: 
    no5 = 0 
相關問題