【问题标题】:How to split a string using an empty separator in Python如何在 Python 中使用空分隔符拆分字符串
【发布时间】:2013-06-27 03:57:07
【问题描述】:

在python中做some_string.split('')的好方法是什么?此语法给出错误:

a = '1111'
a.split('')

ValueError: empty separator

我想获得:

['1', '1', '1', '1']

【问题讨论】:

  • 你真的需要这样做吗?大多数情况下,您可以像对待列表一样对待字符串。
  • 我试图这样做,但它给出了这个错误,所以我认为将这里作为一个问题包括在内会很好
  • 您可能还会觉得这很有趣 - Alternative way to split a list into groups of n
  • @sqpc:不,它不会给出“这个错误”,所以你没有尝试。你试过什么都不做吗?根本不拆?
  • @arshajii 与您的“大多数时候”相反,'str' 对象不支持项目分配。这满足了需求。

标签: python string split


【解决方案1】:

使用list():

>>> list('1111')
['1', '1', '1', '1']

或者,您可以使用map()(仅限 Python 2.7):

>>> map(None, '1111')
['1', '1', '1', '1']

时差:

$ python -m timeit "list('1111')"
1000000 loops, best of 3: 0.483 usec per loop
$ python -m timeit "map(None, '1111')"
1000000 loops, best of 3: 0.431 usec per loop

【讨论】:

    【解决方案2】:

    可以直接将字符串转换为列表

    >>> list('1111')
    ['1', '1', '1', '1']
    

    或使用列表推导

    >>> [i for i in '1111']
    ['1', '1', '1', '1']
    

    如果想要为超过 1 个符号长度的子字符串拆分字符串,第二种方法会很有用

    >>> some_string = '12345'
    >>> [some_string[i:i+2] for i in range(0, len(some_string), 2)]
    ['12', '34', '5']
    

    【讨论】:

      【解决方案3】:

      字符串是可迭代的并且可以被索引,因此你根本不需要拆分它:

      >>> for char in '11111':
      ...   print char
      ... 
      1
      1
      1
      1
      1
      >>> '11111'[4]
      '1'
      

      您可以通过调用 list 来“拆分”它,但这并没有太大区别:

      >>> for char in list('11111'):
      ...   print char
      ... 
      1
      1
      1
      1
      1
      >>> list('11111')[4]
      '1'
      

      因此,只有当您的代码明确需要一个列表时,您才需要这样做。例如:

      >>> list('11111').append('2')
      >>> l = list('11111')
      >>> l.append(2)
      >>> l
      ['1', '1', '1', '1', '1', 2]
      

      这不适用于直字符串:

      >>> l.append('2')
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      AttributeError: 'str' object has no attribute 'append'
      

      在这种情况下,您需要:

      >>> l += '2'
      >>> l
      '111112'
      

      【讨论】:

        【解决方案4】:

        方法#1:

        s="Amalraj"
        l=[i for i in s]
        print(l)
        

        输出:

        ['A', 'm', 'a', 'l', 'r', 'a', 'j']
        

        方法#2:

        s="Amalraj"
        l=list(s)
        print(l)
        

        输出:

        ['A', 'm', 'a', 'l', 'r', 'a', 'j']
        

        方法#3:

        import re; # importing regular expression module
        s="Amalraj"
        l=re.findall('.',s)
        print(l)
        

        输出:

        ['A', 'm', 'a', 'l', 'r', 'a', 'j']
        

        【讨论】:

          【解决方案5】:

          如果你像我一样来到这里是为了拆分数据包而不是逐个字符,我做了这个:

          >>> n=2
          >>> str='423346396677674A446E6838436E304164334A30427874784467567863334942446E41424E413D3D'
          >>> [ str[byte:byte+n] for byte in range(0,len(str)) if byte % n == 0 ]
          ['42', '33', '46', '39', '66', '77', '67', '4A', '44', '6E', '68', '38', '43', '6E', '30', '41', '64', '33', '4A', '30', '42', '78', '74', '78', '44', '67', '56', '78', '63', '33', '49', '42', '44', '6E', '41', '42', '4E', '41', '3D', '3D']
          

          【讨论】:

            猜你喜欢
            • 2012-06-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多