我有类似于1 2 3 4 5 6
的字符串,我可以像这样解压缩它们:
id, amount, p0, p1, p2, p3 = [int(i) for i in s.split()]
现在我把p0 - p3放在一个临时列表list = [p0, p1, p2, p3]
中并迭代它。是否有一种优雅的方法可以跳过最后一步并对x
变量执行相同的操作:
id, amount, list = ...
答案 0 :(得分:4)
您可以使用*
来捕获剩余的'将值转换为一个变量:
id, amount, *p_values = [int(i) for i in s.split()]
Python在分配时允许1个这样的变量;在没有*
的所有其他名称收到值后,它会从右侧获取所有剩余值:
>>> foo, bar, *baz = range(5)
>>> foo, bar, baz
(0, 1, [2, 3, 4])
>>> foo, *bar, baz = range(5)
>>> foo, bar, baz
(0, [1, 2, 3], 4)
>>> *foo, bar, baz = range(5)
>>> foo, bar, baz
([0, 1, 2], 3, 4)
请参阅PEP-3132 Extended Iterable Unpacking:
简单赋值左侧的元组(或列表)(未为扩充赋值定义解包)最多可包含一个前缀为单个星号的表达式(此后称为"已加星标&#34 ;表达式,而列表中的其他表达式称为"强制")。这指定一个子表达式,该子表达式将被分配一个列表,其中包含未被分配给任何强制性表达式的可迭代迭代的所有项目,或者如果没有这样的项目,则为空列表。
答案 1 :(得分:0)
这种方法的“优雅”充其量只是辩论。但你可以这样做:
list = [int(i) for i in s.split()]
id = list.pop(0)
amount = list.pop(0)
这实际上是更多的代码行,但是如果你的尾随列表很长,你就不必输入这么长的p1,p2,p3...
系列并把它放到另一个列表中