问题:如果存在列表索引,请执行X
在我的程序中,用户输入number n
,然后输入n
字符串数,这些字符串存储在列表中。
我需要进行编码,以便如果存在某个列表索引,然后运行一个函数。
我已经嵌套了if语句,这使情况变得更加复杂len(my_list)
。
这是我现在所拥有的简化版本,无法使用:
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.
回答 0
使用列表的长度len(n)
来告知您的决定而不是检查n[i]
每个可能的长度,对您来说更有用吗?
回答 1
我需要进行编码,以便如果存在某个列表索引,然后运行一个函数。
这是try块的完美用法:
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...
但是,根据定义,Python列表中0
和之间的所有项都len(the_list)-1
存在(即,无需尝试,除非您知道0 <= index < len(the_list)
)。
如果希望索引在0和最后一个元素之间,可以使用enumerate:
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
您也可以使用.get方法而不是try / except来获得较短的版本:
>>> something_to_do.get(3, default)('bob')
some thing 1 done with bob
>>> something_to_do.get(22, default)('alice')
nothing done with alice
回答 2
len(nams)
应该等于n
您的代码。所有索引都0 <= i < n
“存在”。
回答 3
只需使用以下代码即可完成:
if index < len(my_list):
print(index, 'exists in the list')
else:
print(index, "doesn't exist in the list")
回答 4
我需要进行编码,以便如果存在某个列表索引,然后运行一个函数。
您已经知道如何对此进行测试,并且实际上已经在代码中执行了这种测试。
对于长的列表,有效索引n
是0
通过n-1
包容性。
因此,i
当且仅当列表的长度至少为时,列表才具有索引i + 1
。
回答 5
使用列表的长度是检查索引是否存在的最快解决方案:
def index_exists(ls, i):
return (0 <= i < len(ls)) or (-len(ls) <= i < 0)
这还将测试负索引以及具有长度的大多数序列类型(如ranges
和str
)。
如果无论如何您以后都需要访问该索引处的项目,则宽恕要比权限要容易,并且它也更快,更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
回答 6
如果要迭代插入的actor数据:
for i in range(n):
if len(nams[i]) > 3:
do_something
if len(nams[i]) > 4:
do_something_else
回答 7
好的,所以我认为这实际上是可能的(出于参数的目的):
>>> your_list = [5,6,7]
>>> 2 in zip(*enumerate(your_list))[0]
True
>>> 3 in zip(*enumerate(your_list))[0]
False
回答 8
您可以尝试这样的事情
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];
回答 9
Oneliner:
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
仅用于信息。恕我直言,try ... except IndexError
是更好的解决方案。
回答 10
不要在方括号前留任何空间。
例:
n = input ()
^
提示:您应该在代码上方和/或下方添加注释。不隐藏您的代码。
祝你今天愉快。
回答 11
很多答案,而不是简单的答案。
要检查字典dict是否存在索引“ id”:
dic = {}
dic['name'] = "joao"
dic['age'] = "39"
if 'age' in dic
如果存在“年龄”,则返回true。