【问题标题】:splitting a string containing characters拆分包含字符的字符串
【发布时间】:2020-11-17 20:23:24
【问题描述】:

我有以下字符串:

test = ['2*0', '4' , '3' , '2' , '3*8' , '4' , '5' , '6' ]

我正在寻找一种将字符串更改为以下字符串的方法:

final = ['0' , '0' , '4' , '3' , '2' , '8' , '8' , '8' , '4' , '5' , '6' ]

我不知道从哪里开始。我需要先拆分那些包含 * 的元素并创建一个新字符串吗?有什么建议吗?

【问题讨论】:

    标签: python python-3.x string split


    【解决方案1】:

    如果你找到一个'*' 字符,你可以在上面str.split,然后选择值和重复它的次数。然后使用itertools.chain.from_iterable 将结果展平成一个列表。

    import itertools
    
    def create_element(s):
        if '*' in s:
            rep, val = s.split('*')
            return [val for _ in range(int(rep))]
        return [s]
    
    list(itertools.chain.from_iterable(create_element(i) for i in test))
    

    输出

    ['0', '0', '4', '3', '2', '8', '8', '8', '4', '5', '6']
    

    【讨论】:

      【解决方案2】:

      一个班轮

      [item for sublist in 
       [[s.split("*")[1]]*int(s.split("*")[0]) if "*" in s else s for s in test] 
       for item in sublist]
      

      【讨论】:

      • 感谢您的解决方案。在我刚刚介绍的这个示例中,您的代码运行良好。但是,在我使用它的较大列表中,长度高于我的实际长度。我不明白这段代码的问题出在哪里。
      • 你能把样本贴在失败的地方吗?
      【解决方案3】:

      使用这个简单的技巧:

      final=[]
      for i in test:
          if "*" in i:
              a=[i.split("*")[1]]*int(i.split("*")[0])
              final.extend(a)
          else:
              final.append(i)
      

      【讨论】:

        【解决方案4】:

        遍历列表。当元素中有* 时,将其拆分并将第二个元素附加到结果中适当的次数。

        def expand_list(l):
            result = []
            for s in l:
                if '*' in s:
                    len, val = s.split('*')
                    result.extend([val] * int(len))
                else:
                    result.append(s)
            return result
        

        【讨论】:

        • 3*8 应该给出'8', '8', '8',但这个答案只给出一个'8'
        • 我没注意到。
        • 在这个例子和我更大的列表中都工作得很好。谢谢
        【解决方案5】:
        test = ['2*0', '4' , '3' , '2' , '3*8' , '4' , '5' , '6' ]
        res = []
        for i in test:
            if '*' in i:
                    a,b = i.split('*')
                    res.extend([b for i in range(int(a))])
            else:
                    res.append(i)
        # ['0', '0', '4', '3', '2', '8', '8', '8', '4', '5', '6']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          相关资源
          最近更新 更多