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

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

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

由于我嵌套了关于 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.
405758 次浏览

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

这是 试试阻挡的完美用法:

ar=[1,2,3]


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


# Note: this only is a valid test in this context
# with absolute (ie, positive) index
# a relative index is only showing you that a value can be returned
# from that relative index from the end of the list...

但是,根据定义,在 0len(the_list)-1之间的 Python 列表中的所有项都存在(即,如果您知道 0 <= index < len(the_list),就不需要 try 块)。

如果希望索引在0和最后一个元素之间,可以使用 列举:

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) ,而不是使用 序列容器(如列表)。您可以这样重写代码:

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

你也可以使用 。获得方法而不是 try/除了一个更短的版本:

>>> 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“存在”。

如果要迭代插入的角色数据:

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

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

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

您已经知道如何测试这个,实际上也知道如何测试 已经在您的代码中执行这样的测试

长度 n列表的有效索引是 0n-1(包括 n-1)。

因此,一个列表有一个索引 i 如果,也只有如果,该列表的长度至少是 i + 1

好的,所以我认为这实际上是可能的(为了讨论起见) :

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

不要在括号前留空格。

例如:

n = input ()
^

提示: 您应该在代码之上和/或之下添加注释,而不是在代码之后。


祝你愉快。

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

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

这也测试负指数和大多数有长度的序列类型(如 rangesstr)。

如果以后需要访问该索引处的项,那么它是 请求原谅比请求许可更容易,而且速度更快,更具 Python 特性。使用 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

你可以试试这个

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];

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

if index < len(my_list):
print(index, 'exists in the list')
else:
print(index, "doesn't exist in the list")

线条:

do_X() if len(your_list) > your_index else do_something_else()

完整的例子:

In [10]: def do_X():
...:     print(1)
...:


In [11]: def do_something_else():
...:     print(2)
...:


In [12]: your_index = 2


In [13]: your_list = [1,2,3]


In [14]: do_X() if len(your_list) > your_index else do_something_else()
1

仅供参考。 Imho,try ... except IndexError是更好的解决方案。

这里有一个简单的,如果计算效率低下的方法,我今天想解决这个问题:

只需在 my _ list 中创建一个可用索引的列表:

indices = [index for index, _val in enumerate(my_list)]

然后您可以在每个代码块之前进行测试:

if 1 in indices:
"do something"
if 2 in indices:
"do something more"

但是任何读到这篇文章的人都应该从@user6039980中找到正确答案