按字符串长度分割字符串?

tkb*_*kbx 35 python

有没有办法获取一个4*x字符长的字符串,并将其切成4个字符串,每个x字符长,不知道字符串的长度?

例如:

>>>x = "qwertyui"
>>>split(x, one, two, three, four)
>>>two
'er'
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 76

>>> x = "qwertyui"
>>> chunks, chunk_size = len(x), len(x)/4
>>> [ x[i:i+chunk_size] for i in range(0, chunks, chunk_size) ]
['qw', 'er', 'ty', 'ui']
Run Code Online (Sandbox Code Playgroud)

  • “这是为了可读性。” 我完全是为了可读性,但将“len(x)”称为“块”并不支持该目标。“chunks”这个名字是“块的数量”的缩写,对吗?所以它应该设置为 4。如果你想为 `len(x)` 命名,请将其命名为“length”。 (4认同)
  • 设置`chunks`有什么价值?它总是`len(x)` (3认同)

fnk*_*nkr 14

我尝试过Alexanders的回答但在Python3中遇到了这个错误:

TypeError: 'float' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)

这是因为Python3中的除法运算符返回了一个浮点数.这对我有用:

>>> x = "qwertyui"
>>> chunks, chunk_size = len(x), len(x)//4
>>> [ x[i:i+chunk_size] for i in range(0, chunks, chunk_size) ]
['qw', 'er', 'ty', 'ui']
Run Code Online (Sandbox Code Playgroud)

请注意第//2行的末尾,以确保截断为整数.

  • 你可能正在使用Python3,其中除法运算符返回一个浮点数.您可以使用截断除法运算符`//`而不是转换为整数:`len(x)// 4`.另外,我认为`int(len(x))`中的强制转换是不必要的. (2认同)

Eth*_*ord 12

分割字符串中每第 n 个字符?,“狼”给出了最简洁的答案:

>>> import re
>>> re.findall('..','1234567890')
['12', '34', '56', '78', '90']
Run Code Online (Sandbox Code Playgroud)


Анд*_*ких 9

some_string="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
x=3 
res=[some_string[y-x:y] for y in range(x, len(some_string)+x,x)]
print(res)
Run Code Online (Sandbox Code Playgroud)

会产生

['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR', 'STU', 'VWX', 'YZ']
Run Code Online (Sandbox Code Playgroud)


Jer*_*odG 8

  • :param s:str; 源字符串
  • :param w:int; 分开的宽度

使用textwrap模块:

PyDocs-textwrap

import textwrap
def wrap(s, w):
    return textwrap.fill(s, w)
Run Code Online (Sandbox Code Playgroud)

:return str:

灵感来自亚历山大的答案

PyDocs数据结构

def wrap(s, w):
    return [s[i:i + w] for i in range(0, len(s), w)]
Run Code Online (Sandbox Code Playgroud)
  • :退货清单:

灵感来自Eric的回答

PyDocs正则表达式

import re
def wrap(s, w):    
    sre = re.compile(rf'(.{{{w}}})')
    return [x for x in re.split(sre, s) if x]
Run Code Online (Sandbox Code Playgroud)
  • :退货清单:

完整的代码示例/替代方法


小智 7

def split2len(s, n):
    def _f(s, n):
        while s:
            yield s[:n]
            s = s[n:]
    return list(_f(s, n))
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下你的答案吗? (3认同)

小智 5

这是一个不需要事先知道字符串长度的单行:

from functools import partial
from StringIO import StringIO

[l for l in iter(partial(StringIO(data).read, 4), '')]
Run Code Online (Sandbox Code Playgroud)

如果您有文件或套接字,则不需要 StringIO 包装器:

[l for l in iter(partial(file_like_object.read, 4), '')]
Run Code Online (Sandbox Code Playgroud)