为什么split()结果中返回空字符串?

2024-06-02 01:44:04 发布

您现在位置:Python中文网/ 问答频道 /正文

返回'/segment/segment/'.split('/')的目的是什么?

注意空元素。如果您拆分的分隔符恰好位于字符串的第一个位置和最末端,则从每一端返回空字符串会给您带来什么额外的值?


Tags: 字符串目的元素segmentsplit分隔符最末端
3条回答

这里有两点需要考虑:

  • 期望'/segment/segment/'.split('/')的结果等于['segment', 'segment']是合理的,但是这样会丢失信息。如果split()按你想要的方式工作,如果我告诉你a.split('/') == ['segment', 'segment'],你就不能告诉我a是什么。
  • 结果应该是什么?['a', 'b']?,或['a', '', 'b']?一、 例如,应该split()合并相邻的分隔符吗?如果应该这样做,那么将很难解析由字符分隔的数据,并且某些字段可以为空。我敢肯定有很多人想在上述情况下得到结果中的空值!

最后,可以归结为两件事:

一致性:如果我有n分隔符,在a中,我在split()之后得到n+1值。

应该可以做一些复杂的事情,也可以做一些简单的事情:如果您想忽略由于split()而导致的空字符串,您可以始终执行以下操作:

def mysplit(s, delim=None):
    return [x for x in s.split(delim) if x]

但是如果不想忽略空值,那么应该能够忽略。

语言必须选择split()的一个定义-有太多不同的用例来满足每个人的默认需求。我认为Python的选择是一个很好的选择,而且是最合乎逻辑的。(顺便说一句,我不喜欢C的原因之一是它合并了相邻的分隔符,使得很难对它进行认真的解析/标记化。)

有一个例外:没有参数的a.split()会挤压连续的空格,但是可以说在这种情况下这样做是正确的。如果你不想要这种行为,你可以总是a.split(' ')

str.split是对str.join的补充,所以

"/".join(['', 'segment', 'segment', ''])

让你回到原来的字符串。

如果没有空字符串,则第一个和最后一个'/'将在join()之后丢失

一般来说,要删除在split()结果中返回的空字符串,您可能需要查看^{}函数。

示例:

filter(None, '/segment/segment/'.split('/'))

回报

['segment', 'segment']

相关问题 更多 >