【问题标题】:How can I read a string in 5-character chunks? [duplicate]如何读取 5 个字符的字符串? [复制]
【发布时间】:2015-12-31 19:51:10
【问题描述】:

我的 Python 代码应该输出一个字符串除以 5 个字符的数组。我不明白这里的逻辑:

string = 'j3h1273172' # example
def getStringSplitBy(num=5, string):
     for i in range(len(string)):
         print string[i+num]

输出应该是:

['j3h12','73172']

【问题讨论】:

    标签: python string


    【解决方案1】:

    使用list-comprehension:

    def strings(num,string):
        print [string[i*num:(i+1)*num] for i in range(len(string)/num)]
    

    【讨论】:

      【解决方案2】:

      你可以这样试试,

      >>> [string[:5], string[5:]]
      ['j3h12', '73172']
      

      功能:

      >>> def get_string_split_by(num, string):
      ...   string_len = len(string)
      ...   items = []
      ...   for ix in range(0,string_len, num):
      ...     items.append(string[ix:ix+num])
      ...   return items
      
      >>> get_string_split_by(5, 'j3h1273172')
      ['j3h12', '73172']
      >>> get_string_split_by(5, 'j3h127317212345')
      ['j3h12', '73172', '12345']
      

      【讨论】:

        【解决方案3】:

        该函数中没有任何逻辑,因为它有语法错误,但它不能按预期工作。您可以简单地使用:

        def get_string_split_by(num, string):
            return string[:num], string[num:]
        

        【讨论】:

          【解决方案4】:

          我认为itertools为此任务提供了recipe

          def grouper(iterable, n, fillvalue=None):
              "Collect data into fixed-length chunks or blocks"
              # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
              args = [iter(iterable)] * n
              return izip_longest(fillvalue=fillvalue, *args)
          

          【讨论】:

            【解决方案5】:

            您需要使用 Python 的 string slicing 来划分字符串。您发布的代码是抓取单个字符而不是字符集。

            这段代码会将字符串分成几段。此外,num 应该排在第二位,因为它是一个可选参数。

            def getStringSplitBy(string, num=5):
                # Take the length of the string divided by num to figure out how many
                # slices you'll end up with
                for i in range(len(string)//num):
                    # Slice the string in chuncks that are num long
                    yield string[num*i:num*(i+1)] # Yield to make this an iterable
            
            string = 'j3h1273172' # example
            result = list(getStringSplitBy(string,5))
            print(result) # prints ['j3h12', '73172']
            

            【讨论】:

              猜你喜欢
              • 2016-06-05
              • 2011-04-16
              • 1970-01-01
              • 2014-02-04
              • 2020-06-29
              • 1970-01-01
              • 2012-08-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多