如果列表索引存在,请执行X

在我的程序中,用户input数字n ,然后input存储在列表中的n个string。

我需要编码,如果某个列表索引存在,然后运行一个函数。

由于我嵌套了有关len(my_list) if语句,这使事情变得更加复杂。

下面是我现在所拥有的简化版本,这是不工作的:

 n = input ("Define number of actors: ") count = 0 nams = [] while count < n: count = count + 1 print "Define name for actor ", count, ":" name = raw_input () nams.append(name) if nams[2]: #I am trying to say 'if nams[2] exists, do something depending on len(nams) if len(nams) > 3: do_something if len(nams) > 4 do_something_else if nams[3]: #etc. 

使用列表len(n)的长度来通知你的决定而不是检查每个可能长度的n[i]会更有用吗?

I need to code such that if a certain list index exists, then run a function.

这是一个尝试块的完美使用:

 ar=[1,2,3] try: t=ar[5] except IndexError: print 'sorry, no 5' 

但是,根据定义,Python列表中0和len(list)-1之间的所有项都存在(即,除非知道0 <= index < len(list) ),否则不需要尝试。

你可以使用枚举,如果你想索引0和最后一个元素:

 names=['barney','fred','dino'] for i, name in enumerate(names): print i, name # do your thing with the index 'i' or value 'name' for each item... 

我想你是在问错误的问题。 如果我可以build议,你可以像这样重写你的代码:

 def do_something(name): print 'some thing 1 done with',name def do_something_else(name): print 'something 2 done with',name def default(name): print 'nothing done with',name something_to_do={ 3: do_something, 4: do_something_else } n = input ("Define number of actors: ") count = 0 names = [] for count in range(n): print "Define name for actor {}:".format(count+1), name = raw_input () names.append(name) for name in names: try: something_to_do[len(name)](name) except KeyError: default(name) 

运行如下:

 Define number of actors: 3 Define name for actor 1: bob Define name for actor 2: tony Define name for actor 3: alice some thing 1 done with bob something 2 done with tony nothing done with alice 

您也可以使用.get方法而不是尝试/除了较短的版本:

 >>> something_to_do.get(3, default)('bob') some thing 1 done with bob >>> something_to_do.get(22, default)('alice') nothing done with alice 

len(nams)应该等于你的代码中的n 。 所有索引0 <= i < n “存在”。

如果你想迭代插入的actor数据:

 for i in range(n): if len(nams[i]) > 3: do_something if len(nams[i]) > 4: do_something_else 

我需要编码,如果某个列表索引存在,然后运行一个函数。

你已经知道如何testing这个,实际上已经在你的代码中执行了这样的testing

长度为n的列表的有效索引是0n-1含)。

因此, 当且仅当列表的长度至less为i + 1 ,列表具有索引i

使用列表的长度将是检查索引是否存在的最快解决scheme:

 def index_exists(ls, i): return (0 <= i < len(ls)) or (-len(ls) <= i < 0) 

这也testing负指数,和大多数序列types(如rangesstr )有一个长度。

如果之后需要访问该索引处的项目,那么请求宽恕比允许更容易 ,而且它也更快,更多Pythonic。 使用try: except:

 try: item = ls[i] # Do something with item except IndexError: # Do something without the item 

这将是相反的:

 if index_exists(ls, i): item = ls[i] # Do something with item else: # Do something without the item 

好吧,所以我认为这实际上是可能的(为了争辩):

 >>> your_list = [5,6,7] >>> 2 in zip(*enumerate(your_list))[0] True >>> 3 in zip(*enumerate(your_list))[0] False 

不要让你的托架前的任何空间。

例:

 n = input () ^ 

提示:您应该在代码中添加注释。 不在你的代码后面。


祝你今天愉快。