zjm*_*126 71 python syntax list default-value
a=['123','2',4]
b=a[4] or 'sss'
print b
Run Code Online (Sandbox Code Playgroud)
我想在列表索引超出范围时获取默认值(此处为:) 'sss'.
我怎样才能做到这一点?
Tho*_*mas 87
在"请求宽恕,而不是许可"的Python精神中,这是一种方式:
try:
b = a[4]
except IndexError:
b = 'sss'
Run Code Online (Sandbox Code Playgroud)
Tho*_*mas 60
在"请求许可,而不是宽恕"的非Python精神中,这是另一种方式:
b = a[4] if len(a) > 4 else 'sss'
Run Code Online (Sandbox Code Playgroud)
005*_*005 21
在Python的精神中,美丽胜过丑陋
代码高尔夫球方法,使用切片和拆包
b,=a[4:5] or ['sss']
Run Code Online (Sandbox Code Playgroud)
比包装函数更好,或者尝试捕获恕我直言,但对于初学者来说是令人生畏的.就个人而言,我发现元组拆包比列表更性感[#]
使用切片而不解压缩:
b = a[4] if a[4:] else 'sss'
Run Code Online (Sandbox Code Playgroud)
或者,如果你经常这样做,并且不介意制作字典
d = dict(enumerate(a))
b=d.get(4,'sss')
Run Code Online (Sandbox Code Playgroud)
mae*_*aep 16
其他方式:
b = (a[4:]+['sss'])[0]
Run Code Online (Sandbox Code Playgroud)
gec*_*cco 13
您可以创建自己的列表类:
class MyList(list):
def get(self, index, default=None):
return self[index] if len(self) > index else default
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
>>> l = MyList(['a', 'b', 'c'])
>>> l.get(1)
'b'
>>> l.get(9, 'no')
'no'
Run Code Online (Sandbox Code Playgroud)
try:
b = a[4]
except IndexError:
b = 'sss'
Run Code Online (Sandbox Code Playgroud)
一种更干净的方法(仅当您使用字典时才有效):
b = a.get(4,"sss") # exact same thing as above
Run Code Online (Sandbox Code Playgroud)
这是您可能喜欢的另一种方式(同样,仅适用于听写):
b = a.setdefault(4,"sss") # if a[4] exists, returns that, otherwise sets a[4] to "sss" and returns "sss"
Run Code Online (Sandbox Code Playgroud)
您还可以为这些情况定义一个小帮助函数:
def default(x, e, y):
try:
return x()
except e:
return y
Run Code Online (Sandbox Code Playgroud)
它返回函数的返回值x,除非它引发了类型的异常e; 在这种情况下,它返回值y.用法:
b = default(lambda: a[4], IndexError, 'sss')
Run Code Online (Sandbox Code Playgroud)
编辑:使它只捕获一种指定类型的异常.
仍然欢迎提出改进建议!
对于通常需要第一个元素的情况,您可以
next(iter([1, 2, 3]), None)
Run Code Online (Sandbox Code Playgroud)
我可能会在过滤列表后使用它来“打开”列表。
next((x for x in [1, 3, 5] if x % 2 == 0), None)
Run Code Online (Sandbox Code Playgroud)
要么
cur.execute("SELECT field FROM table")
next(cur.fetchone(), None)
Run Code Online (Sandbox Code Playgroud)