我的函数返回一个包含单个整数的列表,如何让它只返回整数?

not*_*arc 6 python list-comprehension list indexof

如何在保持函数单行代码的同时从结果中删除括号?

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")
Run Code Online (Sandbox Code Playgroud)

输出:

[0]
[1]
[2]
[3]
[4]
[5]
[6]
Run Code Online (Sandbox Code Playgroud)

tim*_*geb 13

列表理解是过度的.如果您的列表不包含重复项(如您的示例数据所示,那就是)

>>> def day_to_number(inp):
...     return day_list.index(inp)
... 
>>> day_to_number("Sunday")
0
Run Code Online (Sandbox Code Playgroud)

我也建议做day_list一个函数的参数,即:

>>> def day_to_number(inp, days):
...     return days.index(inp)
... 
>>> day_to_number("Sunday", day_list)
0
Run Code Online (Sandbox Code Playgroud)

在全球名称空间中查找它有点难看.

并使整个事物更有效(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
Run Code Online (Sandbox Code Playgroud)


小智 6

返回第一个项目,而不是列表:

return [day for day in range(len(day_list)) if day_list[day] == inp][0]
Run Code Online (Sandbox Code Playgroud)

但你真正想做的是改变你的逻辑:

return day_list.index(inp)
Run Code Online (Sandbox Code Playgroud)