Python在执行多重赋值时对元组的某些元素进行操作?

2024-04-25 22:07:41 发布

您现在位置:Python中文网/ 问答频道 /正文

做这样的事

s = "12:00 PM"
hours, s = s.split(':')
hours = int(hours)

是否有一个优雅的单行习惯用法在赋值之前对元组的第一个元素执行类型转换?你知道吗

这里有一个选择,但它是相当不和谐的

hours, s = (int(w) if w.isdigit() else w for w in s.split(':'))

Tags: in元素forifelseintsplit元组
3条回答

可以从内嵌lambda函数返回元组,并调用它:

hours, rest = (lambda t: (int(t[0]),t[1]))(s.split(':'))

你可以做:

>>> s = "12:00 PM"
>>> hour, the_rest=[(int(x),y) for x,y in [s.split(':')]][0]
>>> hour
12

如果两次找到同一个字符并不违法,您还可以:

>>> hour, the_rest=int(s[0:s.find(':')]), s[s.find(':')+1:]

你的方法已经可以了。如果您不需要其他物品:

hours = int(s.split(":", 1)[0])

注意:.split()返回一个列表,而不是元组。你知道吗

您可以使用切片来提取前缀:

hours = int(s[:s.index(":")])

可以将对象绑定到新名称并在同一行中使用该名称,但这对于脑筋急转弯的人最有用:

t = a, *b = t[int(a)] = "0:rest".split(":")

相关问题 更多 >