我的函数 return 是一个包含单个整数的列表,我怎样才能使它 return 只有整数?
My function returns a list with a single integer in it, how can I make it return only the integer?
如何从结果中删除括号,同时让函数保持一行代码?
day_list = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
def day_to_number(inp):
return [day for day in range(len(day_list)) if day_list[day] == inp]
print day_to_number("Sunday")
print day_to_number("Monday")
print day_to_number("Tuesday")
print day_to_number("Wednesday")
print day_to_number("Thursday")
print day_to_number("Friday")
print day_to_number("Saturday")
输出:
[0]
[1]
[2]
[3]
[4]
[5]
[6]
Return 第一项,不是列表:
return [day for day in range(len(day_list)) if day_list[day] == inp][0]
但是您真正想要做的是改变您的逻辑:
return day_list.index(inp)
试试这个:
return [day for day in range(len(day_list)) if day_list[day] == inp][0]
但是,这不是实现此目的的最有效方法。试试这个:
day_list.index(inp)
我知道我好像复制了另一个答案,我发誓我没有:)
列表理解有点矫枉过正。如果您的列表不包含重复项(如您的样本数据所示,就这样做)
>>> def day_to_number(inp):
... return day_list.index(inp)
...
>>> day_to_number("Sunday")
0
我还建议将 day_list
作为函数的参数,即:
>>> def day_to_number(inp, days):
... return days.index(inp)
...
>>> day_to_number("Sunday", day_list)
0
在全局名称中查找space有点难看
为了使整个事情更有效率(list.index
是 O(n))使用字典:
>>> days = dict(zip(day_list, range(len(day_list))))
>>> days
{'Monday': 1, 'Tuesday': 2, 'Friday': 5, 'Wednesday': 3, 'Thursday': 4, 'Sunday': 0, 'Saturday': 6}
>>>
>>> def day_to_number(inp, days):
... return days[inp]
...
>>> day_to_number("Sunday", days)
0
这看起来太复杂了。您不需要对此任务进行列表理解。您可以使用 index()
方法:
>>> def day_to_number(inp):
... return day_list.index(inp)
...
>>> day_to_number("Sunday")
0
>>> day_to_number("Monday")
1
>>> day_to_number("Saturday")
6
如果你传递一个无效的值,它会引发一个ValueError
这是一个很好的字典用例:
>>> day_map = {day: index for index, day in enumerate(day_list)}
使用:
>>> day_map['Sunday']
0
>>> day_map['Tuesday']
2
您还可以使用 calendar
模块,它为工作日定义了常量(英文):
>>> import calendar
>>> def day_to_number(day):
... return getattr(calendar, day.upper())
...
>>> day_to_number('wednesday')
2 # Note that 0 = 'Monday'
如果您正在使用它,您可能应该添加一些错误处理:
>>> day_to_number('epoch')
1970
或者:
>>> day_to_number('foo')
Traceback (most recent call last):
File "<ipython-input-22-4649e99206ae>", line 1, in <module>
day_to_number('foo')
File "<ipython-input-14-bf0518eb14b5>", line 2, in day_to_number
return getattr(calendar, day.upper())
AttributeError: 'module' object has no attribute 'FOO'
如何从结果中删除括号,同时让函数保持一行代码?
day_list = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
def day_to_number(inp):
return [day for day in range(len(day_list)) if day_list[day] == inp]
print day_to_number("Sunday")
print day_to_number("Monday")
print day_to_number("Tuesday")
print day_to_number("Wednesday")
print day_to_number("Thursday")
print day_to_number("Friday")
print day_to_number("Saturday")
输出:
[0]
[1]
[2]
[3]
[4]
[5]
[6]
Return 第一项,不是列表:
return [day for day in range(len(day_list)) if day_list[day] == inp][0]
但是您真正想要做的是改变您的逻辑:
return day_list.index(inp)
试试这个:
return [day for day in range(len(day_list)) if day_list[day] == inp][0]
但是,这不是实现此目的的最有效方法。试试这个:
day_list.index(inp)
我知道我好像复制了另一个答案,我发誓我没有:)
列表理解有点矫枉过正。如果您的列表不包含重复项(如您的样本数据所示,就这样做)
>>> def day_to_number(inp):
... return day_list.index(inp)
...
>>> day_to_number("Sunday")
0
我还建议将 day_list
作为函数的参数,即:
>>> def day_to_number(inp, days):
... return days.index(inp)
...
>>> day_to_number("Sunday", day_list)
0
在全局名称中查找space有点难看
为了使整个事情更有效率(list.index
是 O(n))使用字典:
>>> days = dict(zip(day_list, range(len(day_list))))
>>> days
{'Monday': 1, 'Tuesday': 2, 'Friday': 5, 'Wednesday': 3, 'Thursday': 4, 'Sunday': 0, 'Saturday': 6}
>>>
>>> def day_to_number(inp, days):
... return days[inp]
...
>>> day_to_number("Sunday", days)
0
这看起来太复杂了。您不需要对此任务进行列表理解。您可以使用 index()
方法:
>>> def day_to_number(inp):
... return day_list.index(inp)
...
>>> day_to_number("Sunday")
0
>>> day_to_number("Monday")
1
>>> day_to_number("Saturday")
6
如果你传递一个无效的值,它会引发一个ValueError
这是一个很好的字典用例:
>>> day_map = {day: index for index, day in enumerate(day_list)}
使用:
>>> day_map['Sunday']
0
>>> day_map['Tuesday']
2
您还可以使用 calendar
模块,它为工作日定义了常量(英文):
>>> import calendar
>>> def day_to_number(day):
... return getattr(calendar, day.upper())
...
>>> day_to_number('wednesday')
2 # Note that 0 = 'Monday'
如果您正在使用它,您可能应该添加一些错误处理:
>>> day_to_number('epoch')
1970
或者:
>>> day_to_number('foo')
Traceback (most recent call last):
File "<ipython-input-22-4649e99206ae>", line 1, in <module>
day_to_number('foo')
File "<ipython-input-14-bf0518eb14b5>", line 2, in day_to_number
return getattr(calendar, day.upper())
AttributeError: 'module' object has no attribute 'FOO'