5

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

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

4

4 回答 4

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。

于 2012-09-22T04:18:59.953 回答
7

测试索引是否存在:

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

在这种情况下,您最好使用 adict而不是数组,并且可能使用defaultdict.

于 2012-09-22T04:18:44.260 回答
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"
于 2012-09-22T04:13:50.023 回答
1

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

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

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

另一种避免的IndexError方法是抓住它:

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

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

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

如果您不断地“预先设置”您的列表,通常这是一个糟糕设计的标志——也就是说,您设置了一个具有默认值的大列表,然后逐步执行。

于 2012-09-22T04:26:39.503 回答