use*_*317 115 python python-2.7
在我的程序中,用户输入数字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.
Run Code Online (Sandbox Code Playgroud)
小智 135
您是否可以使用列表的长度len(n)来通知您的决定而不是检查n[i]每个可能的长度?
daw*_*awg 80
我需要编写代码,如果存在某个列表索引,则运行一个函数.
这是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...
Run Code Online (Sandbox Code Playgroud)
然而,根据定义,在两者之间一个Python列表中的所有项目0和len(the_list)-1存在(即,没有必要一试,但如果你知道0 <= index < len(the_list)).
如果希望索引介于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...
Run Code Online (Sandbox Code Playgroud)
如果你正在寻找一些定义的'索引'思想,我想你问的是错误的问题.也许您应该考虑使用映射容器(例如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)
Run Code Online (Sandbox Code Playgroud)
运行如下:
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
Run Code Online (Sandbox Code Playgroud)
你也可以使用.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
Run Code Online (Sandbox Code Playgroud)
只需使用以下代码即可完成:
if index < len(my_list):
print(index, 'exists in the list')
else:
print(index, "doesn't exist in the list")
Run Code Online (Sandbox Code Playgroud)
我需要编码,如果某个列表索引存在,则运行一个函数。
您已经知道如何对此进行测试,并且实际上已经在您的代码中执行了此类测试。
长度列表的有效索引n是0通过n-1包含的。
因此,i 当且仅当列表的长度至少为 时,列表才有索引i + 1。
使用列表的长度是检查索引是否存在的最快解决方案:
def index_exists(ls, i):
return (0 <= i < len(ls)) or (-len(ls) <= i < 0)
Run Code Online (Sandbox Code Playgroud)
这还将测试负索引以及大多数具有长度的序列类型(如ranges和str)。
如果无论如何您以后都需要访问该索引处的项目,则宽恕要比权限要容易,并且它也更快,更Python化。使用try: except:。
try:
item = ls[i]
# Do something with item
except IndexError:
# Do something without the item
Run Code Online (Sandbox Code Playgroud)
这将与以下内容相反:
if index_exists(ls, i):
item = ls[i]
# Do something with item
else:
# Do something without the item
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
228619 次 |
| 最近记录: |