Python中列表超出范围时返回特定值
Posted
技术标签:
【中文标题】Python中列表超出范围时返回特定值【英文标题】:Return specific value when list is out of range in Python 【发布时间】:2018-03-31 10:36:28 【问题描述】:如果列表超出范围,如何返回特定值?这是我到目前为止的代码:
def word(num):
return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][num-1]
word(1)
将返回'Sunday'
,但是如果num 不是1-7
之间的整数,我该如何返回默认值?
因此,word(10)
将返回类似 "Error"
的内容。
【问题讨论】:
num
来自哪里?如果输入错误,最好抛出异常。
【参考方案1】:
它应该处理不在您想要的范围内的任何整数。
daysofweek = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
def getday(num, len_range):
if 0 < num <= len_range:
return daysofweek[num - 1]
else:
return "Error"
num_index = int(input("Enter a value for num : "))
print(getday(num_index, len(daysofweek)))
您也可以将getday()
写成这样的紧凑形式:
def getday(num, len_range):
return daysofweek[num - 1] if 0 < num <= len_range else "Error"
【讨论】:
【参考方案2】:您可以使用enumerate(sequence, start=1)
将您的列表转换为字典:
dict(enumerate(['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], 1))
# 1: 'Sunday', 2: 'Monday', 3: 'Tuesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Friday', 7: 'Saturday'
那么,您的查询就像dict.get()
一样简单:
wdays = 1: 'Sunday', 2: 'Monday', 3: 'Tuesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Friday', 7: 'Saturday'
def word(num):
return wdays.get(num, 'Error')
这是一个例子:
>>> word(3)
'Tuesday'
>>> word(10)
'Error'
>>> word('garbage')
'Error'
根据您要对字符串执行的操作,返回 'Error'
而不是简单地抛出错误可能不是一个好主意。否则,每次使用此函数时,您都必须检查字符串是否看起来像工作日或等于'Error'
。
【讨论】:
这种方法的另一个好处是,如果word
传递了 any 错误参数,它也会返回“错误”,而不仅仅是超出范围的整数。跨度>
@PM2Ring:是的。但这取决于目标是什么。通常最好在使用错误输入时立即抛出异常,而不是尝试继续处理损坏的数据。如果我喜欢这种行为,我会写 javascript 而不是 Python ;)
确实如此。在错误的参数上引发 ValueError
而不是返回“错误”会是更好的设计。 OTOH,字符串测试比异常处理便宜。【参考方案3】:
只需将您想要的内容翻译成 Python:
def word(num):
return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][num-1] if 1 <= num <= 7 else 'Error'
【讨论】:
【参考方案4】:普通的if/else
就足够了。
def word(num):
l = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
return l[num-1] if 0<num<=len(l) else "Error"
#驱动代码
>>> word(7)
=> 'Saturday'
>>> word(8)
=> 'Error'
>>> word(-10)
=> 'Error'
【讨论】:
每次调用都很复杂,可能他需要多次调用,所以使用自己的方法和自己的行为要好得多。但它有效——你是对的。return l[num-1] if len(l) >= num > 0 else "Error"
【参考方案5】:
使用带有try-except
的高度pythonic EAFP 方法。
daysofweek = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
def getday(num):
try:
return daysofweek[num - 1]
except IndexError:
return "Error"
【讨论】:
它不适用于negative
值或0
。将回到最后。
@KaushikNP 的理解是 OP 输入了一个介于 1 和 8 之间的值。我只是向他们展示如何使用 eafp 方法,我并没有挑剔他们的功能或它的作用。跨度>
以上是关于Python中列表超出范围时返回特定值的主要内容,如果未能解决你的问题,请参考以下文章