【问题标题】:Splitting a string within a list into a list of lists and further splitting its elements if special character found将列表中的字符串拆分为列表列表,如果找到特殊字符,则进一步拆分其元素
【发布时间】:2021-12-29 20:13:19
【问题描述】:

我有一个字符串列表,我将其拆分为 ('/>') 上的列表列表,但我想进一步拆分该列表的元素,具体取决于它是否具有某个字符 ('/ ') 在其中,同时保持“其他元素”的拆分顺序。例如

lol=['FruitSalad://Fruits/Seasonal/Summer/>June>July>August>Mangoes/Grapes/Guava',
 'FruitSalad://Fruits/Seasonal/Winter/>Nov>Dec>Jan>Banana/Oranges',
 'FruitSalad://Fruits/Seasonal/Summer/>June>July>August>Pineapple']

 l1=[lol[_].split('/>')[-1].split('>') for _ in range(len(lol)) if '/>' in lol[_]]
>>> l1
[['June', 'July', 'August', 'Mangoes/Grapes/Guava'], ['Nov', 'Dec', 'Jan', 'Banana/Oranges'], ['June', 'July', 'August', 'Pineapple']]

我正在尝试获取而不是上述内容

[['June', 'July', 'August', 'Mangoes', 'Grapes', 'Guava'], ['Nov', 'Dec', 'Jan', 'Banana', 'Oranges'], ['June', 'July', 'August', 'Pineapple']]

非常感谢任何帮助!如果我的问题没有意义,请告诉我。 不确定这是否重要,但这应该适用于 python 2.7 和 3.6。谢谢!

【问题讨论】:

    标签: python string split


    【解决方案1】:
    1. 对于每个元素,在/> 上拆分
    2. 取最后一个元素并将斜线替换为>,然后再次拆分
     [l.split("/>",1)[-1].replace("/", ">").split(">") for l in lol]
    

    【讨论】:

      【解决方案2】:

      您可以执行以下操作。

      lol=['FruitSalad://Fruits/Seasonal/Summer/>June>July>August>Mangoes/Grapes/Guava',
       'FruitSalad://Fruits/Seasonal/Winter/>Nov>Dec>Jan>Banana/Oranges',
       'FruitSalad://Fruits/Seasonal/Summer/>June>July>August>Pineapple']
      
      l1=[lol[_].split('/>')[-1].split('>') for _ in range(len(lol)) if '/>' in lol[_]]
      final_l1 = []
      for elem in l1:
         final_l1.append([])
         for each in elem:
            final_l1[-1] += each.split('/')
      
      print(print(final_l1))
      

      输出

      [['June', 'July', 'August', 'Mangoes', 'Grapes', 'Guava'], ['Nov', 'Dec', 'Jan', 'Banana', 'Oranges'], ['June', 'July', 'August', 'Pineapple']]
      

      【讨论】:

        【解决方案3】:

        @Kaz Salvatore,试试这个:

        lol=  ['FruitSalad://Fruits/Seasonal/Summer/>June>July>August>Mangoes/Grapes/Guava',
        'FruitSalad://Fruits/Seasonal/Winter/>Nov>Dec>Jan>Banana/Oranges',
        'FruitSalad://Fruits/Seasonal/Summer/>June>July>August>Pineapple']
        
        [x.replace('://', ' ')
         .replace('/', ' ')
         .replace('/>', ' ')
         .replace('>', ' ')
         .replace('  ', ' ')
         .split() for x in lol]
        

        输出:

        [['FruitSalad',
          'Fruits',
          'Seasonal',
          'Summer',
          'June',
          'July',
          'August',
          'Mangoes',
          'Grapes',
          'Guava'],
         ['FruitSalad',
          'Fruits',
          'Seasonal',
          'Winter',
          'Nov',
          'Dec',
          'Jan',
          'Banana',
          'Oranges'],
         ['FruitSalad',
          'Fruits',
          'Seasonal',
          'Summer',
          'June',
          'July',
          'August',
          'Pineapple']]
        

        【讨论】:

          【解决方案4】:

          你也可以使用Regular expression

          import re 
          [re.split(r'/|>',l.split('/>')[-1]) for l in lol if '/>' in l]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-20
            • 1970-01-01
            • 1970-01-01
            • 2018-10-24
            • 1970-01-01
            • 1970-01-01
            • 2018-05-16
            • 1970-01-01
            相关资源
            最近更新 更多