【问题标题】:how to split the string into 3 strings and replace on the same place如何将字符串拆分为3个字符串并在同一个地方替换
【发布时间】:2019-08-30 09:55:22
【问题描述】:

我有一个列表列表:每个列表都包含一个包含一个句子的字符串,其中有未清理的单词,比如 word;word 所以我需要像 word 一样清理它;单词。 sypbol(;) 也应该返回

start=[["lolo mama12;lo ushfudhsui"],["lolo mama12;lo lolo;jhdsjh" ],["lolo  mama12;lo"]]
output=[]
for item in start:
    #print(item)
    for l in item:
        if ';' in l:
            l=l.split(";")
            l.append("")
            l[2]=l[1]
            l[1]=";"
            for i in l:
                item.append(i)
                output.append(item)
            #print(l)
        else:
            output.append(([item]))


start=[["lolo mama12;lo ushfudhsui"],["lolo mama12;lo lolo;jhdsjh" ],["lolo  mama12;lo"]]
output=[]
for item in start:
    #print(item)
    for l in item:
        if ';' in l:
            l=l.split(";")
            l.append("")
            l[2]=l[1]
            l[1]=";"
            for i in l:
                item.append(i)
                output.append(item)

        else:
            output.append(item)

我想要得到的结果是这样的:

output=[["lolo mama12 ; lo ushfudhsui"],["lolo mama12 ; lo lolo ; jhdsjh" ],["lolo  mama12 ; lo"]]

【问题讨论】:

    标签: python list split


    【解决方案1】:

    您不必自己检查;,如果您想将其保留为单个字符串,也不必拆分该字符串。您可以使用.replace 方法甚至列表推导来在一行中完成所有操作!

    `output = [[inner_string.replace(";", " ; ")] for [inner_string] in start]`
    

    它是如何工作的:

    >>> start=[["lolo mama12;lo ushfudhsui"],["lolo mama12;lo lolo;jhdsjh" ],["lolo  mama12;lo"]]
    >>> output = [[inner_string.replace(";", " ; ")] for [inner_string] in start]
    >>> print(output)
    [['lolo mama12 ; lo ushfudhsui'], ['lolo mama12 ; lo lolo ; jhdsjh'], ['lolo  mama12 ; lo']]
    >>> 
    

    至于您当前的代码,请查看.join。 ;) 做你所做的另一种方法是在";" 上进行拆分,然后加入" ; "。这里也有列表理解:

    >>> output2 = [[" ; ".join(inner_string.split(";"))] for [inner_string] in start]
    >>> print(output2)
    [['lolo mama12 ; lo ushfudhsui'], ['lolo mama12 ; lo lolo ; jhdsjh'], ['lolo  mama12 ; lo']]
    

    请注意,这两种解决方案都基于您的内部列表仅包含 1 个字符串这一事实。如果您需要,我可以修改它们以供一般使用。

    【讨论】:

      【解决方案2】:

      您可以尝试将所有";" 替换为" ; "map

      list(map(lambda x: [x[0].replace(";", " ; ")], start))
      

      代码:

      # Input
      start=[["lolo mama12;lo ushfudhsui"],["lolo mama12;lo lolo;jhdsjh" ],["lolo  mama12;lo"]]
      
      # Output 
      out = list(map(lambda x: [x[0].replace(";", " ; ")], start))
      print(out)
      # [['lolo mama12 ; lo ushfudhsui'], ['lolo mama12 ; lo lolo ; jhdsjh'], ['lolo  mama12 ; lo']]
      

      【讨论】:

        【解决方案3】:

        您可以替换所有出现的 ';'在 ' 之前或之后有 0 个或多个空格; '。这样,如果您的字符串的一部分已经被“清理”,您就不会添加任何不必要的空间,如果您只是替换它们就会发生这种情况。

        import re
        
        start=[["lolo mama12;lo ushfudhsui"],["lolo mama12;lo lolo;jhdsjh" ],["lolo  mama12;lo"]]
        
        pattern = re.compile(r'\s*;\s*')
        out  = [[pattern.sub(' ; ', sublist[0])] for sublist in start]
        print(out)
        # [['lolo mama12 ; lo ushfudhsui'], ['lolo mama12 ; lo lolo ; jhdsjh'], ['lolo  mama12 ; lo']]
        

        【讨论】:

          【解决方案4】:

          如果我理解正确,您只希望word;word 看起来像word ; word,为此,您可以将';' 替换为' ; '

          start=[["lolo mama12;lo ushfudhsui"],["lolo mama12;lo lolo;jhdsjh" ],["lolo  mama12;lo"]]
          
          clean = [[x.replace(';', ' ; ') for x in i] for i in start]
          

          输出:

          [['lolo mama12 ; lo ushfudhsui'],
           ['lolo mama12 ; lo lolo ; jhdsjh'],
           ['lolo  mama12 ; lo']]
          

          【讨论】:

            猜你喜欢
            • 2018-12-11
            • 2020-10-18
            • 1970-01-01
            • 1970-01-01
            • 2013-08-09
            • 1970-01-01
            • 1970-01-01
            • 2011-02-01
            • 1970-01-01
            相关资源
            最近更新 更多