有时我会写这样的代码:
a,temp,b = s.partition('-')
我只需要选择第一个和第三个元素。temp
永远不会被使用。有一个更好的方法吗?
换句话说,有没有更好的方法来选择不同的元素来创建一个新列表?
例如,我想使用0,1,3,7
旧列表中的元素创建一个新列表。代码将是这样的:
newlist = [oldlist[0],oldlist[1],oldlist[3],oldlist[7]]
这很丑,不是吗?
有时我会写这样的代码:
a,temp,b = s.partition('-')
我只需要选择第一个和第三个元素。temp
永远不会被使用。有一个更好的方法吗?
换句话说,有没有更好的方法来选择不同的元素来创建一个新列表?
例如,我想使用0,1,3,7
旧列表中的元素创建一个新列表。代码将是这样的:
newlist = [oldlist[0],oldlist[1],oldlist[3],oldlist[7]]
这很丑,不是吗?
小心使用
a, _, b = s.partition('-')
有时_
用于国际化(gettext),所以你不想不小心覆盖它。
通常我会这样做partition
而不是创建一个我不需要的变量
a, b = s.partition('-')[::2]
这在一般情况下
from operator import itemgetter
ig0137 = itemgetter(0, 1, 3, 7)
newlist = ig0137(oldlist)
如果您在循环中使用 itemgetter 比列表理解更有效
首先,还有这个替代方案:
a, b = s.partition('-')[::2]
对于后者,由于没有明确的间隔,因此无法将其做得太干净。但这可能适合您的需求:
newlist = [oldlist[k] for k in (0, 1, 3, 7)]
您可以使用 Python 的扩展切片功能定期访问列表:
>>> a = range(10)
>>> # Pick every other element in a starting from a[1]
>>> b = a[1::2]
>>> print b
>>> [1, 3, 5, 7, 9]
负索引按您的预期工作:
>>> c = a[-1::-2]
>>> print c
>>> [9, 7, 5, 3, 1]
对于你的情况,
>>> a, b = s.partition('-')[::2]
Python 中选择第一个和第三个值的常见做法是:
a, _, b = s.partition('-')
并选择列表中的指定元素,您可以执行以下操作:
newlist = [oldlist[k] for k in (0, 1, 3, 7)]
如果您不需要保留中间字段,则可以使用split
(并且类似地rsplit
)与可选的 maxsplit 参数一起将拆分限制为分隔符的第一个(或最后一个)匹配项:
a, b = s.split('-', 1)
这避免了一次性的临时或额外的切片。
唯一需要注意的是,与split
不同partition
的是,如果找不到分隔符,则返回原始字符串。解包的尝试将因此失败。该partition
方法总是返回一个 3 元组。