在 Python 中将字符串拆分为固定大小的块
Split a string into fixed size chunks in Python
将字符串拆分为固定大小的块:
- 声明一个存储空列表的变量。
- 使用一个步骤迭代字符串的长度范围。
- 在每次迭代中,将长度为 N 的字符串附加到列表中。
my_str = 'abcdefgh' my_list = [] n = 2 for i in range(0, len(my_str), n): my_list.append(my_str[i:i+n]) print(my_list) # 👉️ ['ab', 'cd', 'ef', 'gh'] # -------------------------------------------- # using list comprehension my_list_2 = [my_str[i:i+n] for i in range(0, len(my_str), n)] print(my_list_2) # 👉️ ['ab', 'cd', 'ef', 'gh']
我们使用range
该类来获取一系列索引,这些索引代表每个块中的第一个字符。
my_str = 'abcdefgh' my_list = [] n = 2 # 👇️ [0, 2, 4, 6] print(list(range(0, len(my_str), n)))
range类通常用于在循环中循环特定次数,for
并采用以下参数:
姓名 | 描述 |
---|---|
start |
表示范围开始的整数(默认为0 ) |
stop |
向上,但不包括提供的整数 |
step |
范围将由每 N 个数字组成,从start 到stop (默认为1 ) |
字符串切片的语法是my_str[start:stop:step]
.
my_str = 'abcdefgh' my_list = [] n = 2 for i in range(0, len(my_str), n): my_list.append(my_str[i:i+n]) print(my_list) # 👉️ ['ab', 'cd', 'ef', 'gh']
请注意,start
索引是包含的,而stop
索引是排他的。
在每次迭代中,我们从 中的当前项获取起始索引range
,并stop
通过将起始索引与所需的块长度相加来计算索引。
或者,您可以使用列表理解。
my_str = 'abcdefgh' n = 2 my_list_2 = [my_str[i:i+n] for i in range(0, len(my_str), n)] print(my_list_2) # 👉️ ['ab', 'cd', 'ef', 'gh']
列表推导用于对每个元素执行一些操作,或者选择满足条件的元素子集。
for
此解决方案是第一个使用循环的代码片段的单行版本
。
If the string has a length that is an odd number, the last item in the list will
contain fewer characters.
my_str = 'abcdefghi' n = 2 my_list_2 = [my_str[i:i+n] for i in range(0, len(my_str), n)] print(my_list_2) # 👉️ ['ab', 'cd', 'ef', 'gh', 'i']
You can also use a while
loop to split a string every nth character.
my_str = 'abcdefghi' my_str_copy = my_str my_list = [] n = 2 while my_str_copy: my_list.append(my_str_copy[:n]) my_str_copy = my_str_copy[n:] # 👇️ ['ab', 'cd', 'ef', 'gh', 'i'] print(my_list)
We declared a second variable that stores the exact same string.
while
loop, we append the first n
characters of the copied string to the list and remove the first n
characters from the copied string.You can also use the wrap()
method to split a string into fixed-size chunks.
To split a string into fixed-size chunks:
- Import the
wrap()
method from thetextwrap
module. - Pass the string and the max width of each slice to the method.
- The
wrap()
method will split the string into a list with items of max
length N.
from textwrap import wrap my_str = 'abcdefgh' n = 2 my_list = wrap( my_str, n, drop_whitespace=False, break_on_hyphens=False ) # 👇️ ['ab', 'cd', 'ef', 'gh'] print(my_list)
textwrap.wrap
方法会将
字符串拆分为一个列表,以便每个列表项的长度最多为 N 个字符。
我们将drop_whitespace
关键字参数设置为False
因为该方法的默认行为是删除空格。