将strip解压缩为整数和列表的组合

时间:2014-11-17 17:44:20

标签: python python-3.x

我有类似于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 = ... 

2 个答案:

答案 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...系列并把它放到另一个列表中