Python 将条带解包为整数和列表的组合
我有类似于Python 将条带解包为整数和列表的组合,python,python-3.x,Python,Python 3.x,我有类似于123456的字符串,我可以这样解包: id, amount, p0, p1, p2, p3 = [int(i) for i in s.split()] 现在,我将p0-p3放入一个临时列表list=[p0,p1,p2,p3],并对其进行迭代。是否有一种优雅的方法可以跳过最后一步并对x变量执行同样的操作: id, amount, list = ... 您可以使用*将“剩余”值捕获到一个变量中: id, amount, *p_values = [int(i) for i in s.
123456
的字符串,我可以这样解包:
id, amount, p0, p1, p2, p3 = [int(i) for i in s.split()]
现在,我将p0-p3放入一个临时列表list=[p0,p1,p2,p3]
,并对其进行迭代。是否有一种优雅的方法可以跳过最后一步并对x
变量执行同样的操作:
id, amount, list = ...
您可以使用
*
将“剩余”值捕获到一个变量中:
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)
见:
简单赋值左侧的元组(或列表)(未为扩充赋值定义解包)最多可包含一个以单个星号开头的表达式(此后称为“带星号”的表达式,而列表中的其他表达式称为“必填”)。这将指定一个子表达式,该子表达式将被分配一个列表,其中包含要解包的iterable中未分配给任何强制表达式的所有项,或者如果没有此类项,则为空列表
您可以使用
*
将“剩余”值捕获到一个变量中:
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)
见:
简单赋值左侧的元组(或列表)(未为扩充赋值定义解包)最多可包含一个以单个星号开头的表达式(此后称为“带星号”的表达式,而列表中的其他表达式称为“必填”)。这将指定一个子表达式,该子表达式将被分配一个列表,其中包含要解包的iterable中未分配给任何强制表达式的所有项,或者如果没有此类项,则为空列表
这种方法的“优雅”充其量也值得商榷。但你可以这样做:
list = [int(i) for i in s.split()]
id = list.pop(0)
amount = list.pop(0)
这实际上是更多的代码行,但如果你跟踪的int列表很长,你就不必键入如此长的p1、p2、p3…
序列并将其放入另一个列表中这种方法的“优雅”最多也可以讨论。但你可以这样做:
list = [int(i) for i in s.split()]
id = list.pop(0)
amount = list.pop(0)
这实际上是更多的代码行,但是如果你跟踪的int列表很长,你就不必键入这么长的
p1,p2,p3…
序列并将其放入另一个列表中不要命名你自己的变量list
,它会隐藏内置变量。不要命名你自己的变量list
,它会隐藏内置变量。