关于python:如果列表索引存在,请执行X.

If list index exists, do X

在我的程序中,用户输入数字n,然后输入字符串的n,这些字符串存储在一个列表中。

我需要编写这样的代码:如果某个列表索引存在,那么运行一个函数。

我已经嵌套了关于len(my_list)的if语句,这使得情况更加复杂。

以下是我现在所拥有的一个简化版本,但它不起作用:

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.


您是否可以使用列表中的长度len(n)来通知您的决定,而不是检查每个可能长度的n[i]


我需要编写这样的代码:如果某个列表索引存在,那么运行一个函数。

这是Try块的最佳用途:

1
2
3
4
5
6
ar=[1,2,3]

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

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

如果需要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


在代码中,len(nams)应该等于n。所有指标都存在。


只需使用以下代码即可完成:

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)

这也测试了负指数,以及大多数具有长度的序列类型(如rangesstr)。

如果你以后无论如何都需要在索引上访问这个项目,那么请求原谅比请求允许更容易,而且这也是越来越多的Python。使用try: except:

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.

您已经知道如何对此进行测试,实际上已经在代码中执行了这些测试。

长度n列表的有效指数为0n-1不等。

因此,只有当列表的长度至少为i + 1时,列表才具有索引i


如果要迭代插入的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 ()
         ^

提示:您应该在代码的上方和/或下方添加注释。不要落后于你的准则。

祝你今天愉快。