好的,这实际上是两个问题。首先,我想知道是否有办法测试列表的索引是否存在。例如,我希望每次使用list[i] += 1
之类的代码给定条件为真时增加list [i],但如果索引不存在,我会收到错误。因此,我想设置一个测试,在出现错误的情况下,执行list.append(1)
之类的操作。什么代码可以完成这样的测试条件? If list[i]
抛出错误。
作为后续问题,一旦测试成立,除了使用上述追加方法之外,还有什么方法可以创建列表索引吗?
答案 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
有没有办法创建列表索引,除了使用 上述附加方法?
您不“创建”索引,当您从列表中添加或删除项目时,它会自动设置。因此,创建索引的唯一方法是将项目附加到列表中。
如果你经常“预先设置”你的列表,通常它是一个糟糕设计的标志 - 也就是说,你设置一个带有默认值的大型列表,然后逐步完成。