【问题标题】:How to prevent a blank space while removing \r\n using .rstrip()如何在使用 .rstrip() 删除 \r\n 时防止出现空格
【发布时间】:2019-11-30 07:14:19
【问题描述】:

我有以下列表

listA=['farm', '\r\n']

当我编写以下代码删除'\r\n'时

listA = [x.rstrip() for x in listA]

我得到的输出是

['farm', '']

我想要的理想输出是。我如何做到这一点

['farm']

【问题讨论】:

    标签: python regex python-3.x string


    【解决方案1】:
    listB = [x for x in listA if x.rstrip()]
    

    【讨论】:

    • 更准确地说,您可能希望使用 listB = [x.rstrip() for x in listA if x.rstrip()] - 但这似乎有点矫枉过正和不雅。
    【解决方案2】:

    您可以使用filter()None 作为第一个参数(而不是函数名),它将删除空字符串、空列表、None。但它也删除了整数0 和浮点0.0

    listA = ['farm', '']
    
    listB = list(filter(None, listA))
    

    【讨论】:

    • 感谢您的回答。给猫剥皮的多种方法。
    • 您的解决方案不会从原始列表中删除 '\r\n'
    • @MykolaZotko 不,它会删除 strip() 之后的空字符串 - 请参阅代码中的示例数据 - 结果是相同的。
    【解决方案3】:

    您可以使用正则表达式检查字符串是否只包含空格字符:

    import re
    
    listA = ['a   ', '\r\n', '']
    
    listB = [i.rstrip() for i in listA if i and not re.match(r'\s+', i)]
    
    print(listB)
    # ['a']
    

    【讨论】: