【问题标题】:Python: An empty element remains after the list comprehensionPython:列表理解后保留一个空元素
【发布时间】:2010-07-24 04:21:42
【问题描述】:

keywords_list = """ 奶牛 狗 猫 """

keywords_list = [i.strip() for i in keywords_list.split("\n") if i]

我仍然得到一个空元素(最后一个元素),我想知道为什么。也将不胜感激提出改进我的代码的建议。

提前致谢!

编辑: 通过先剥离字符串自己解决了这个问题,但我仍然想知道为什么列表中还有一个空字符串元素。

这是我的解决方案:

keywords_list = [i.strip() for i in keywords_list.strip().split("\n")]

【问题讨论】:

    标签: python list


    【解决方案1】:

    您正在检查if i,并且对于任何非空字符串i 都成功——包括一个全是空格的字符串,因此在剥离后会产生一个空字符串。要修复,请使用

    if i and not i.isspace()
    

    作为您的 listcomp 的条件(因此这仅适用于非空、非全空白字符串)。

    【讨论】:

    • 你可能会推断我是 PHP 编程的 ;)
    【解决方案2】:

    通过先剥离字符串自己解决了这个问题,但我仍然想知道为什么列表中还有一个空字符串元素。

    因为你的初始字符串是"\ncow\ndog\ncat\n",所以当你split('\n')时,你会得到['', 'cow', 'dog', 'cat', '' ]。 它就是 split 的工作方式 - 每当找到分隔符时,它会将内容拆分为 2 个元素,一个用于分隔符之前的部分,一个用于分隔符之后的部分,即使其中一个为空。

    【讨论】:

      【解决方案3】:

      当您有一个字符串 'abc<sep>def<sep>ghi' 时,您显然希望拆分生成 ['abc', 'def', 'ghi']。如果你的字符串被截断为'abc<sep>def<sep>',你仍然有两个分隔符,所以你仍然会得到三个列表项,最后一个是第二个分隔符后面的空字符串。

      简而言之,您的字符串使用'\n' 作为终止符,但拆分函数将其解释为分隔符

      您可以在不需要strip() 的情况下解决此问题。将'\n' 视为分隔符,并从输入字符串中删除最后的换行符:

      keywords_list = """
      cow
      dog
      cat"""
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多