【问题标题】:Python: Is there a way to split a string of numbers into every 3rd number?Python:有没有办法将一串数字分成每个第三个数字?
【发布时间】:2014-07-19 09:48:44
【问题描述】:

例如,如果我有一个字符串 a=123456789876567543 我可以有一个类似...的列表

123 456 789 876 567 543

【问题讨论】:

  • “12345”你想要什么:“123 45”还是“12 345”?你可能想在你的问题中解决这个问题。
  • 我认为您不理解 Hans 的澄清请求。如果输入的长度不是三的整数倍,那么您将拥有一个小于三位数的组,然后您必须选择它应该出现的位置。
  • 这是许多几乎相同的问题的重复。

标签: python list


【解决方案1】:
>>> a="123456789"
>>> [int(a[i:i+3]) for i in range(0, len(a), 3)]
[123, 456, 789]

【讨论】:

    【解决方案2】:

    配方来自itertools docs(当长度不是3的倍数时可以定义填充值):

    from itertools import izip_longest
    
    def grouper(n, iterable, fillvalue=None):
        args = [iter(iterable)] * n
        return izip_longest(fillvalue=fillvalue, *args)
    
    s = '123456789876567543'
    
    print [''.join(l) for l in grouper(3, s, '')]
    
    
    >>> ['123', '456', '789', '876', '567', '543']
    

    【讨论】:

      【解决方案3】:
      >>> import re
      >>> a = '123456789876567543'
      >>> l = re.findall('.{1,3}', a)
      >>> l
      ['123', '456', '789', '876', '567', '543']
      >>> 
      

      【讨论】:

        【解决方案4】:
        s = str(123456789876567543)
        l = []
        for i in xrange(0, len(s), 3):
            l.append(int(s[i:i+3]))
        print l
        

        【讨论】:

        • 如果长度不是 3 的倍数,那不会失败吗?
        • 不,它不会,如果没有足够的字符,字符串切片只会返回较短的子字符串。
        • 我知道如果它不是 3 的倍数,它会失败。但对于我正在做的事情,它不会。非常感谢。
        【解决方案5】:

        如果你想要右对齐:

        a='123456789876567543'
        format(int(a),',').split(',')
        ['123', '456', '789', '876', '567', '543']
        a='12345'
        format(int(a),',').split(',')
        ['12', '345']
        

        【讨论】:

          猜你喜欢
          • 2016-11-07
          • 2010-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-18
          • 2022-08-08
          • 2011-05-07
          • 2021-10-04
          相关资源
          最近更新 更多