If list index exists, do X
在我的程序中,用户输入数字
我需要编写这样的代码:如果某个列表索引存在,那么运行一个函数。
我已经嵌套了关于
以下是我现在所拥有的一个简化版本,但它不起作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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. |
您是否可以使用列表中的长度
我需要编写这样的代码:如果某个列表索引存在,那么运行一个函数。
这是Try块的最佳用途:
1 2 3 4 5 6 | ar=[1,2,3] try: t=ar[5] except IndexError: print 'sorry, no 5' |
但是,根据定义,
如果需要0和最后一个元素之间的索引,可以使用Enumerate:
1 2 3 4 5 6 | names=['barney','fred','dino'] for i, name in enumerate(names): print i, name if i in (3,4): # do your thing with the index 'i' or value 'name' for each item... |
如果你在寻找一些定义好的"索引"思想,我认为你问的问题是错误的。也许您应该考虑使用映射容器(如dict)和序列容器(如list)。您可以这样重写代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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) |
像这样运行:
1 2 3 4 5 6 7 | 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方法,而不是尝试/除了较短的版本:
1 2 3 4 | >>> something_to_do.get(3, default)('bob') some thing 1 done with bob >>> something_to_do.get(22, default)('alice') nothing done with alice |
在代码中,
只需使用以下代码即可完成:
1 2 3 4 | if index < len(my_list): print(index, 'exists in the list') else: print(index,"doesn't exist in the list") |
使用列表的长度将是检查索引是否存在的最快解决方案:
1 2 | def index_exists(ls, i): return (0 <= i < len(ls)) or (-len(ls) <= i < 0) |
这也测试了负指数,以及大多数具有长度的序列类型(如
如果你以后无论如何都需要在索引上访问这个项目,那么请求原谅比请求允许更容易,而且这也是越来越多的Python。使用
1 2 3 4 5 | try: item = ls[i] # Do something with item except IndexError: # Do something without the item |
这与以下情况相反:
1 2 3 4 5 | if index_exists(ls, i): item = ls[i] # Do something with item else: # Do something without the item |
I need to code such that if a certain list index exists, then run a function.
您已经知道如何对此进行测试,实际上已经在代码中执行了这些测试。
长度
因此,只有当列表的长度至少为
如果要迭代插入的actors数据:
1 2 3 4 5 | for i in range(n): if len(nams[i]) > 3: do_something if len(nams[i]) > 4: do_something_else |
你可以试试这个
1 2 3 4 5 6 7 | list = ["a","b","C","d","e","f","r"] for i in range(0, len(list), 2): print list[i] if len(list) % 2 == 1 and i == len(list)-1: break print list[i+1]; |
好吧,所以我认为这实际上是可能的(为了争论):
1 2 3 4 5 | >>> your_list = [5,6,7] >>> 2 in zip(*enumerate(your_list))[0] True >>> 3 in zip(*enumerate(your_list))[0] False |
不要在支架前留出任何空间。
例子:
1 2 | n = input () ^ |
提示:您应该在代码的上方和/或下方添加注释。不要落后于你的准则。
祝你今天愉快。