测试列表的索引是否存在

时间:2012-09-22 04:07:22

标签: python

好的,这实际上是两个问题。首先,我想知道是否有办法测试列表的索引是否存在。例如,我希望每次使用list[i] += 1之类的代码给定条件为真时增加list [i],但如果索引不存在,我会收到错误。因此,我想设置一个测试,在出现错误的情况下,执行list.append(1)之类的操作。什么代码可以完成这样的测试条件? If list[i]抛出错误。

作为后续问题,一旦测试成立,除了使用上述追加方法之外,还有什么方法可以创建列表索引吗?

4 个答案:

答案 0 :(得分:8)

听起来你真正想要的是一个defaultdict - 不是一个列表,而是一个整数映射到你看过它们的次数的某种计数。

(这非常接近perl中的autovivificaiton概念,如果你以前使用过它)

此代码可以使用:

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.

答案 1 :(得分:7)

测试索引是否存在:

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

在这种情况下,您可能最好使用dict代替数组,而可能使用defaultdict

答案 2 :(得分:3)

  

除了使用上述追加方法之外,还有什么方法可以创建列表索引吗?

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"

答案 3 :(得分:1)

  

首先,我想知道是否有办法测试列表的索引   存在。

您可以利用列表索引是数字(从0开始)的事实,并在修改列表时重新计算:

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

另一方面,要避免IndexError抓住它:

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

有没有办法创建列表索引,除了使用   上述附加方法?

您不“创建”索引,当您从列表中添加或删除项目时,它会自动设置。因此,创建索引的唯一方法是将项目附加到列表中。

如果你经常“预先设置”你的列表,通常它是一个糟糕设计的标志 - 也就是说,你设置一个带有默认值的大型列表,然后逐步完成。