python中string.partition的良好实践

时间:2012-08-29 03:24:41

标签: python string variable-assignment

有时我写这样的代码:

a,temp,b = s.partition('-')

我只需要选择第一个和第三个元素。永远不会使用temp。有更好的方法吗?

换句话说,是否有更好的方法来选择不同的元素来制作新的列表?

例如,我想使用旧列表中的元素0,1,3,7创建一个新列表。该 代码就像这样:

newlist = [oldlist[0],oldlist[1],oldlist[3],oldlist[7]]

这很难看,不是吗?

5 个答案:

答案 0 :(得分:6)

小心使用

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比列表理解更有效

答案 1 :(得分:5)

首先还有这个选择:

a, b = s.partition('-')[::2]

对于后者,由于没有明确的间隔,所以没有办法太干净。但这可能适合您的需求:

newlist = [oldlist[k] for k in (0, 1, 3, 7)]

答案 2 :(得分:3)

您可以使用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]

答案 3 :(得分:2)

Python中用于选择第一个和第三个值的常见做法是:

a, _, b = s.partition('-')

要选择列表中的指定元素,您可以这样做:

newlist = [oldlist[k] for k in (0, 1, 3, 7)]

答案 4 :(得分:1)

如果您不需要保留中间字段,可以使用split(以及类似rsplit}和可选的maxsplit参数将分割限制为第一个(或最后一个)匹配分离器:

a, b = s.split('-', 1)

这可以避免一次性临时或额外的切片。

唯一需要注意的是splitpartition不同,如果找不到分隔符,则会返回原始字符串。因此,解压缩的尝试将失败。 partition方法始终返回3元组。