2012-09-22 21 views
5

好的,所以這實際上是兩個問題。首先,我想知道是否有方法來測試列表的索引是否存在。例如,我想用list[i] += 1這樣的代碼在每次給定條件爲真時增加list [i],但是如果索引不存在,我會給出一個錯誤。所以我想設置一個測試,在出現錯誤的情況下,可以執行類似list.append(1)的測試。什麼樣的代碼可以完成這樣的測試條件? If list[i]將引發錯誤。測試列表的索引是否存在

作爲一個後續問題,一旦測試成立,除了使用前面提到的append方法之外,還有什麼方法可以創建列表索引嗎?

+3

你可以使用'try..except'並捕獲'IndexError',除了你可以附加列表 – avasal

+2

@avasal這不是什麼例外 – igor

回答

8

這聽起來像你真正想要的是一個defaultdict - 不是一個列表,而是一個整數映射到你看過它們的次數的某種計數。

(這是非常接近autovivificaiton Perl語言的概念,如果你使用的是之前)

此代碼將工作:

from collections import defaultdict 

# don't name a variable 'list'; you'll end up hiding the actual list type 
my_List = defaultdict(int) # create a mapping, elements will default to 0 

然後你可以使用

my_list[i] += 1 

對於任何的值爲i。如果之前已經看過,那麼它會增加它。如果沒有,那麼my_list[i]將獲得的默認值爲0,這將立即增加到1

3

有沒有什麼辦法可以創建列表索引,除了使用前面提到的append方法?

是的用Range方法。

indexList = range(len(nameList)) # create a list of indexes 
print "Index list:", indexList 

for i in indexList:   # Pick items out of the list 
    print ">>>", nameList[i] 

最好的方法來測試在Python null變量是...(這是非常重要的None是大寫和小寫沒有)。

if list[i] != None: #check if there is something there 
    print "Oh hello... " + list[i] 
else: 
    print "Nothing to see here, move along" 
7

測試一個索引是否存在:

if 0 <= i < len(list): ... do something with list[i] ... 
else: ... i is out of bounds, do something else ... 

在這種情況下,你可能會更好過使用dict而不是數組,可能是一個defaultdict

1

首先,我想知道是否有一種方法來測試列表 的索引存在。

你可以採取的事實列表索引是數字(從0開始),當名單被修改,重新計算的優勢:

if i <= len(mylist): 
    print mylist[i] 

的另一種方法,避免IndexError是捕捉它:

try: 
    mylist[i] += 1 
except IndexError: 
    print "No item at ", i 

有沒有什麼辦法除了使用上述 append方法創建一個列表索引?

您不會「創建」索引,當您從列表中添加或刪除項目時,它會自動設置。所以創建索引的唯一方法是將一個項目追加到列表中。

如果您不斷「預先設置」您的列表 - 也就是說,您使用默認值設置了一個大列表,然後逐步完成,通常它是一個壞設計的標誌。