python中字符串分区的良好实践



有时我会写这样的代码:

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

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

换句话说,有没有更好的方法来挑选不同的元素来制作一个新的列表?

例如,我想使用旧列表中的元素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)]

如果不需要保留中间字段,可以使用带有可选maxsplit参数的split(类似地,rsplit)将拆分限制为分隔符的第一个(或最后一个)匹配:

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

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

唯一需要注意的是,与partition不同,split在找不到分隔符的情况下会返回原始字符串。因此,解包的尝试将失败。partition方法总是返回一个3元组。

最新更新