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

2025-02-17 09:24:00
admin
原创
61
摘要:问题描述:'/segment/segment/'.split('/')回去还有什么意义['', 'segment', 'segment', '']?注意空元素。如果你在恰好位于位置 1 且位于字符串末尾的分隔符上进行拆分,那么从两端返回空字符串会给你带来什么额外的价值?解决方案 1:str.split补充st...

问题描述:

'/segment/segment/'.split('/')回去还有什么意义['', 'segment', 'segment', '']

注意空元素。如果你在恰好位于位置 1 且位于字符串末尾的分隔符上进行拆分,那么从两端返回空字符串会给你带来什么额外的价值?


解决方案 1:

str.split补充str.join,所以

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

返回原始字符串。

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

解决方案 2:

更一般地说,要删除split()结果中返回的空字符串,您可能需要查看该filter函数。

例子:

f = filter(None, '/segment/segment/'.split('/'))
s_all = list(f)

返回

['segment', 'segment']

解决方案 3:

这里有两个主要考虑点:

  • 期望的结果'/segment/segment/'.split('/')等于是['segment', 'segment']合理的,但这样会丢失信息。如果split()按照你想要的方式工作,如果我告诉你a.split('/') == ['segment', 'segment'],你不能告诉我结果a是什么。

  • 结果是'a//b'.split()['a', 'b']? 还是['a', '', 'b']? 即,应该split()合并相邻的分隔符? 如果应该,那么解析由字符分隔的数据将非常困难,并且某些字段可能为空。 我相当肯定有很多人确实希望上述情况的结果中出现空值!

最终可以归结为两件事:

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

应该可以做复杂的事情,也应该可以轻松地做简单的事情:如果您想忽略空字符串split(),您可以随时执行以下操作:

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

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

该语言必须选择一个定义split()— 有太多不同的用例无法默认满足每个人的需求。我认为 Python 的选择是正确的,也是最合乎逻辑的。(顺便说一句,我不喜欢 C 的原因之一strtok()是它合并了相邻的分隔符,这使得用它进行严肃的解析/标记化变得极其困难。)

有一个例外:a.split()不带参数会挤压连续的空白,但有人可能会认为在这种情况下这是正确的做法。如果您不想要这种行为,您可以随时a.split(' ')

解决方案 4:

我不确定你在寻找什么样的答案?你得到三个匹配项,因为你有三个分隔符。如果你不想要那个空的,只需使用:

'/segment/segment/'.strip('/').split('/')

解决方案 5:

总是x.split(y)返回一个项目列表1 + x.count(y)是一种宝贵的规律——正如@gnibbler 已经指出的那样,它使split彼此join完全相反(显然应该是这样),它还精确地映射了所有类型的分隔符连接记录的语义(例如csv文件行[[引用问题的网络]],来自/etc/groupUnix的行,等等),它允许(正如@Roman的回答提到的)轻松检查(例如)绝对路径与相对路径(在文件路径和URL中),等等。

另一种看待这个问题的方式是,你不应该肆意地将信息抛之脑后,毫无收获。将 等同于 能得到什么好处x.split(y)x.strip(y).split(y)当然没有好处——当你想表达第二种意思时,使用第二种形式很容易,但如果第一种形式被武断地认为是第二种形式,那么当你确实想要第一种形式时,你就有很多工作要做(正如上一段所指出的那样,这种情况并不罕见)。

但实际上,用数学规律来思考是自学设计可行 API 的最简单、最通用的方法。举另一个例子,对于任何有效的x和,非常重要——这立即表明了为什么应该y x == x[:y] + x[y:]排除切片的一个极端。你制定的不变断言越简单,得到的语义就越有可能是你在现实生活中所需要的——这是数学在处理宇宙时非常有用这一神秘事实的一部分。

尝试为前导和尾随分隔符是特殊情况的方言制定不变量split...反例:诸如的字符串方法isspace不是最简单的 --x.isspace()等同于x and all(c in string.whitespace for c in x)-- 那个愚蠢的前导x and就是为什么你经常发现自己在编码not x or x.isspace(),以回到应该设计到is...字符串方法中的简单性(其中空字符串“是”任何你想要的东西 - 与街头马感相反,也许[[空集,如零等,一直让大多数人感到困惑;-)]],但完全符合显而易见的精炼数学常识!-)。

解决方案 6:

嗯,它让你知道那里有一个分隔符。所以,看到 4 个结果让你知道你有 3 个分隔符。这让你能够用这些信息做任何你想做的事情,而不是让 Python 删除空元素,然后让你手动检查起始或结束分隔符(如果你需要知道的话)。

简单示例:假设您想要检查绝对文件名与相对文件名。这样,您就可以通过拆分完成所有操作,而不必检查文件名的第一个字符是什么。

解决方案 7:

考虑这个最小的例子:

>>> '/'.split('/')
['', '']

split必须给出分隔符 之前和之后的内容'/',但没有其他字符。因此它必须给出空字符串,从技术上讲,该字符串位于 之前和之后'/',因为'' + '/' + '' == '/'

解决方案 8:

如果您不想返回空格,split请不带参数使用它。

>>> "  this   is  a sentence ".split()
['this', 'is', 'a', 'sentence']
>>> "  this   is  a sentence ".split(" ")
['', '', 'this', '', '', 'is', '', 'a', 'sentence', '']

解决方案 9:

如果想忽略空行,请在拆分之前始终使用 strip 函数。

youroutput.strip().split('分割器')

例子:

     yourstring =' 
hey
john
how

are
you'
   
    yourstring.strip().split('
')

解决方案 10:

尝试想出新的方法来做到这一点。这里有一个代码,可以删除所有空格和一些结果。我感兴趣的是,是否可以只在给定字符串的开头和结尾删除它们。

import string
print(list(string.whitespace))
print({ord(c): None for c in string.whitespace})
s = '  Hi Stackoverflow 
     Mi    

x0bhai
      Here '
print(s.translate({ord(c): None for c in string.whitespace}))

结果:

[' ', '    ', '
', '
', 'x0b', 'x0c']
{32: None, 9: None, 10: None, 13: None, 11: None, 12: None}
HiStackoverflowMihaiHere
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2545  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1551  
  建筑工程全生命周期涉及从项目规划、设计、施工到运营维护等多个复杂阶段,每个阶段都产生和依赖大量信息。PLM(产品生命周期管理)系统作为一种整合数据、流程和人员的数字化解决方案,正逐渐成为建筑行业实现高效协同与可持续发展的关键支撑。通过数字化转型,PLM系统能够优化各阶段的工作流程,提升项目整体质量和效率,为建筑工程的全...
plm是什么软件   1  
  产品生命周期管理(PLM)系统在企业资源成本率优化方面发挥着至关重要的作用。通过构建有效的数据模型,PLM系统能够整合企业各个环节的数据,为资源成本的精准分析和优化提供有力支持。这不仅有助于企业降低成本,还能提升产品质量和市场竞争力。PLM系统概述PLM系统是一种用于管理产品从概念设计到退役全生命周期过程中所有信息和流...
PLM项目管理软件   1  
  产品生命周期管理(PLM)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它整合了从产品概念设计到产品退役的全生命周期数据与流程,助力企业提升效率、降低成本并增强创新能力。随着技术的不断发展,到 2025 年,PLM 系统将具备一系列核心功能模块,这些模块将深度影响企业的运营与发展。产品数据管理模块产品...
plm是什么意思   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用