Python / R 向量顺序分割与跨步分割


R中一个字符串或者Python中一个list,需要分割成指定的n块。

顺序分割按照顺序从中间截断,而跨步分割将邻近的n个字符放到不同的块中。最高频用于文件整理,这里以向量分割为例。


1. 数据示例

1.1 Python

python 复制代码
import string, numpy as np

c = (string.ascii_uppercase*2)[:30]
c = np.array(list(c))
print(c)

输出:

复制代码
['A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' 'A' 'B' 'C' 'D']

1.2 R

r 复制代码
c <- rep(LETTERS, 2)[1:30]
c

输出:

复制代码
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "A" "B" "C" "D"

2. 顺序分割(contiguous blocks)

2.1 Python:np.array_split(可不整除)

python 复制代码
np.array_split(c, 3)

返回结果:

复制代码
[array(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='<U1'),
 array(['K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'], dtype='<U1'),
 array(['U', 'V', 'W', 'X', 'Y', 'Z', 'A', 'B', 'C', 'D'], dtype='<U1')]

2.2 Python:np.split(严格均分,长度必须能整除)

python 复制代码
np.split(c[:30], 3)

返回结果:

复制代码
[array(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='<U1'),
 array(['K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'], dtype='<U1'),
 array(['U', 'V', 'W', 'X', 'Y', 'Z', 'A', 'B', 'C', 'D'], dtype='<U1')]

注意:np.split(c, 4) 会报错,因为 30 % 4 != 0

2.3 R:顺序分割

r 复制代码
split(c, rep(seq_len(3), each = ceiling(length(c)/3)))

返回结果:

复制代码
$`1`
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"

$`2`
 [1] "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T"

$`3`
 [1] "U" "V" "W" "X" "Y" "Z" "A" "B" "C" "D"

3. 跨步分割(stride / cyclic)

3.1 Python:按索引轮流分组

python 复制代码
def stride(c, k):
    return {i: c[i::k] for i in range(k)}

stride(c, 3)

返回结果:

复制代码
{0: array(['A', 'D', 'G', 'J', 'M', 'P', 'S', 'V', 'Y', 'B'], dtype='<U1'),
 1: array(['B', 'E', 'H', 'K', 'N', 'Q', 'T', 'W', 'Z', 'C'], dtype='<U1'),
 2: array(['C', 'F', 'I', 'L', 'O', 'R', 'U', 'X', 'A', 'D'], dtype='<U1')}

[i::k]表示:

  1. i:起始索引(从0开始)
  2. :结束位置(省略表示到末尾)
  3. k:步长(每隔k个元素取1个)

示例:

python 复制代码
c = np.arange(1, 11)  # [1,2,3,4,5,6,7,8,9,10]

c[0::3]  # 从索引0开始,每3步取1个 → [1,4,7,10]
c[1::3]  # 从索引1开始,每3步取1个 → [2,5,8]
c[2::3]  # 从索引2开始,每3步取1个 → [3,6,9]

3.2 R:跨步分割

r 复制代码
split(c, 1:3)

返回结果:

复制代码
$`1`
 [1] "A" "D" "G" "J" "M" "P" "S" "V" "Y" "B"

$`2`
 [1] "B" "E" "H" "K" "N" "Q" "T" "W" "Z" "C"

$`3`
 [1] "C" "F" "I" "L" "O" "R" "U" "X" "A" "D"

4. 总结

目标 Python R 备注
顺序/连续块 np.array_split(c, k) split(c, rep(seq_len(k), each=ceiling(length(c)/k))) 长度不整除自动处理
顺序/严格均分 np.split(c, k) --- 必须整除,否则报错
跨步/轮流分组 {i: c[i::k] for i in range(k)} split(c, 1:k) 按索引轮流分组

相关推荐
小北方城市网1 小时前
Python + 前后端全栈进阶课程(共 10 节|完整版递进式|从技术深化→项目落地→就业进阶,无缝衔接基础课)
大数据·开发语言·网络·python·数据库架构
程序员JerrySUN1 小时前
OP-TEE + YOLOv8:从“加密权重”到“内存中解密并推理”的完整实战记录
android·java·开发语言·redis·yolo·架构
阿里嘎多学长2 小时前
2025-12-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
nvd112 小时前
故障排查:Pytest Asyncio Event Loop Closed 错误
python
郝学胜-神的一滴2 小时前
Linux进程与线程控制原语对比:双刃出鞘,各显锋芒
linux·服务器·开发语言·数据结构·c++·程序人生
deephub2 小时前
Lux 上手指南:让 AI 直接操作你的电脑
人工智能·python·大语言模型·agent
Channing Lewis2 小时前
Python读取excel转成html,并且复制excel中单元格的颜色(字体或填充)
python·html·excel
小钟不想敲代码2 小时前
Python(一)
开发语言·python
ji_shuke2 小时前
canvas绘制拖拽箭头
开发语言·javascript·ecmascript
大佬,救命!!!2 小时前
对算子shape相关的属性值自动化处理
python·算法·自动化·学习笔记·算子·用例脚本·算子形状