【问题标题】:Python: Split, strip, and join in one linePython:在一行中拆分、剥离和连接
【发布时间】:2012-09-05 01:46:29
【问题描述】:

我很好奇他们是不是有一些我可能不知道的蟒蛇魔法来完成一点轻浮

给定行:

csvData.append(','.join([line.split(":").strip() for x in L]))

我正在尝试在: 上拆分一行,修剪其周围的空白,然后加入,

问题是,由于数组是从line.split(":") 返回的,所以

for x in L #<== L doesn't exist!

由于我没有 line.split(":") 返回的数组的名称,因此导致问题

所以我很好奇是否有一种性感的语法可以让我一次性完成这个任务?

干杯!

【问题讨论】:

    标签: python join split list-comprehension trim


    【解决方案1】:

    类似的东西?:

    >>> L = "1:2:3:4"
    >>> result = ",".join([item.strip() for item in L.split(":")])
    >>> result
    '1,2,3,4'
    

    掌握列表推导需要一段时间。当您分解它们时,它们基本上只是打包的循环。

    因此,在学习时,尝试将其分解为正常循环,然后将其转换为列表推导式。

    在您的示例中,您没有在任何地方分配 line 变量,因此即使在标准循环中也会出错。

    >>> for x in L:
    ...     items = line.split(":")
    ...
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    NameError: name 'line' is not defined
    >>>
    

    【讨论】:

    • 中间不用建列表
    • 是的,没错,但对于初学者来说,它为什么会起作用可能会令人困惑。
    【解决方案2】:

    给定一个字符串 S:

    ','.join([x.strip() for x in s.split(':')])
    

    【讨论】:

    • 这里不需要列表理解,只需','.join(x.strip() for x in s.split(':'))
    • 是的,尽管列表理解可能会阐明部分解决方案。
    • @AshwiniChaudhary 你的回答有何不同?
    【解决方案3】:
    >>> line = 'a: b :c:d:e  :f:gh   '
    >>> ','.join(x.strip() for x in line.split(':'))
    'a,b,c,d,e,f,gh'
    

    您也可以这样做:

    >>> line.replace(':',',').replace(' ','')
    'a,b,c,d,e,f,gh'
    

    【讨论】:

    • 我实际上更喜欢第一个答案,因为第二个对空格的鲁棒性较差。
    • 第一个答案,太棒了!
    • @DSM for sp in [' ', '\n', '\t']: line = line.replace(sp, '') 怎么样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2015-11-02
    • 2018-09-28
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多