Python中将列表拆分为大小为N的块

在本文中,我们将介绍如何在Python中将列表拆分为大小均匀的块。

方法1:使用yield

yield关键字使函数能够在再次调用时返回到它停止的位置。这是与常规函数的关键区别,一个常规的函数不能回到它停止的地方。yield关键字帮助函数记住其状态,yield使函数能够挂起和恢复,同时它在挂起执行时返回一个值。

my_list = ['geeks', 'for', 'geeks', 'like','geeky','nerdy', 'geek', 'love','questions','words', 'life']# Yield successive n-sized
# chunks from l.
def divide_chunks(l, n):# looping till length lfor i in range(0, len(l), n): yield l[i:i + n]# How many elements each
# list should have
n = 5x = list(divide_chunks(my_list, n))
print (x)

输出

[['geeks', 'for', 'geeks', 'like', 'geeky'], ['nerdy', 'geek', 'love', 'questions', 'words'], ['life']]

方法2:使用for循环

在这个例子中,我们使用了Python中的循环和列表切片,这将帮助我们将列表分成块。

my_list = [1, 2, 3, 4, 5,6, 7, 8, 9]
start = 0
end = len(my_list)
step = 3
for i in range(start, end, step):x = iprint(my_list[x:x+step])

输出

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

方法3: 使用列表解析

在Python中,将列表拆分为一行代码,将列表拆分为多个列表是一种优雅的方式。

my_list = [1, 2, 3, 4, 5,6, 7, 8, 9]# How many elements each
# list should have
n = 4 # using list comprehension
final = [my_list[i * n:(i + 1) * n] for i in range((len(my_list) + n - 1) // n )] 
print (final)

输出

[[1, 2, 3, 4], [5, 6, 7, 8], [9]]

另一种实现方式:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9] # How many elements each 
# list should have 
n = 4# using list comprehension 
x = [l[i:i + n] for i in range(0, len(l), n)] 
print(x)

输出

[[1, 2, 3, 4], [5, 6, 7, 8], [9]]

方法4:使用Numpy

在这里,我们使用Numpy.array_split,它将数组拆分为n个大小相等的块。

import numpy as nparr = range(30)
np.array_split(arr, 6)

输出

[array([0, 1, 2, 3, 4]),array([5, 6, 7, 8, 9]),array([10, 11, 12, 13, 14]),array([15, 16, 17, 18, 19]),array([20, 21, 22, 23, 24]),array([25, 26, 27, 28, 29])]

方法5:使用itertools

from itertools import islicedef chunk(arr_range, arr_size):arr_range = iter(arr_range)return iter(lambda: tuple(islice(arr_range, arr_size)), ())print(list(chunk(range(30), 5)))

输出

[(0, 1, 2, 3, 4),(5, 6, 7, 8, 9),(10, 11, 12, 13, 14),(15, 16, 17, 18, 19),(20, 21, 22, 23, 24),(25, 26, 27, 28, 29)]

方法6: 使用collections

from collections import dequedef split_list(input_list, chunk_size):# Create a deque object from the input listdeque_obj = deque(input_list)# While the deque object is not emptywhile deque_obj:# Pop chunk_size elements from the left side of the deque object# and append them to the chunk listchunk = []for _ in range(chunk_size):if deque_obj:chunk.append(deque_obj.popleft())# Yield the chunkyield chunk
input_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
chunk_size = 3
chunks = list(split_list(input_list, chunk_size))
print(chunks) 

输出

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

deque类允许您轻松地从列表的左侧或右侧移除元素,从而轻松地将列表分割为特定大小的块。代码使用while循环和生成器函数迭代列表,每次生成一个块。当deque为空时,循环中断,这表明所有元素都已被处理。

方法7: 部分赋值

这里有一个例子,你可以轻松地处理大小为N的块列表:

my_list = list(range(10))
chunk_size = 3
while my_list:chunk, my_list = my_list[:chunk_size], my_list[chunk_size:]print(chunk)

输出

[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/70183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(三)

五、旋转手势(RotationGesture) RotationGesture(value?:{fingers?:number; angle?:number}) 旋转手势用于触发旋转手势事件,触发旋转手势的最少手指数量为2指,最大为5指,最小改变度数为1度,拥有两个可…

03-Dockerfile

Dockerfile简介 Dockerfile是什么? Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本 Dockerfile官网 https://docs.docker.com/engine/reference/builder/ Dockerfile构建三步曲 编写Dockerfile文件docke…

mac安装adobe需要注意的tips(含win+mac all安装包)

M2芯片只能安装2022年以后的(包含2022年的) 1、必须操作的开启“任何来源” “任何来源“设置,这是为了系统安全性,苹果希望所有的软件都从商店或是能验证的官方下载,导致默认不允许从第三方下载应用程序。macOS sie…

力扣(LeetCode)算法_C++——寻找重复的子树

给你一棵二叉树的根节点 root ,返回所有 重复的子树 。 对于同一类的重复子树,你只需要返回其中任意 一棵 的根结点即可。 如果两棵树具有 相同的结构 和 相同的结点值 ,则认为二者是 重复 的。 示例 1: 输入:root…

php如何设置随机数

第一种方法用mt_rand() 第二种方法(最快的) 第三种取当时时间戳 第四种打乱字符串 5 //开始创建验证码(直接用函数生成,比较方便快捷) php mt_rand生成0~1随机小数的效果比较 第一种方法用mt_rand() function GetRandStr($length){ $s…

智能合约安全分析,Vyper 重入锁漏洞全路径分析

智能合约安全分析,Vyper 重入锁漏洞全路径分析 事件背景 7 月 30 日 21:10 至 7 月 31 日 06:00 链上发生大规模攻击事件,导致多个 Curve 池的资金损失。漏洞的根源都是由于特定版本的 Vyper 中出现的重入锁故障。 攻击分析 通过对链上交易数据初步分…

Ubutnu允许ssh连接使用root与密码登录

文章目录 1. 修改sshd_config2. 设置root密码3. 重启SSH服务 1. 修改sshd_config 修改/etc/ssh/sshd_config文件,找到 #Authentication,将 PermitRootLogin 参数修改为 yes。如果 PermitRootLogin 参数被注释,请去掉首行的注释符号&#xff…

机器学习:基于梯度下降算法的逻辑回归实现和原理解析

这里写目录标题 什么是逻辑回归?Sigmoid函数逻辑回归损失函数梯度下降 逻辑回归定义逻辑函数线性组合模型训练决策边界 了解逻辑回归:从原理到实现什么是逻辑回归?逻辑回归的原理逻辑回归的实现逻辑回归的应用代码示例算法可视化 当涉及到二元…

01_TMS320F28004x系列MCU介绍和资料搜集

1. TI C2000 实时微控制器 TI公司在处理器方面的产品线有:基于ARM内核的微控制器/微处理器、MSP430微控制器、C2000系列实时微控制器、还有数字信号处理器(DSP)。 其中,C2000是TI公司专门针对实时控制推出的32位微控制器。TI公司…

SpingBoot整合Sa-Token框架(1)

一、文档参考:框架介绍 (sa-token.cc) 框架生态——开源项目 (sa-token.cc) 二、与SpingBoot整合 1、创建项目 在 IDE 中新建一个 SpringBoot 项目,例如:sa-token-demo-springboot(不会的同学请自行百度或者参考:Sp…

代码随想录算法训练营第三十九天 |● 62.不同路径 ● 63. 不同路径 II

题目链接:62.不同路径 代码随想录 视频讲解:动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_bilibili 因为只能向右或则向下走,所以到第i,j位置有dp[i][j]的方法数等于 dp[i - 1] 的方法数加…

macOS Ventura 13.5.1 上 lrzsz无法使用的问题

背景 最近更新了版本从macOS12.4更新到了13.5.1,发现lrzsz无法使用了,具体表现形式是rz选完文件后卡在那个rz waiting to receive.**B0100000023be50,或者sz后卡在**B0100000。 过程 一开始怀疑的是expect的问题,因为我是自己写…

Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

文章目录 1. Dockerfile概念2. Dockerfile 指令FROM 指定基础镜像RUN执行命令CMD 容器启动命令COPY 复制文件ADD 更高级的复制文件ENV 设置环境变量ARG 构建参数VOLUME 定义匿名卷EXPOSE 暴露端口WORKDIR 指定工作目录USER 指定当前用户LABEL 为镜像添加元数据SHELL 指令 3. 使…

【系统设计系列】 DNS和CDN

系统设计系列初衷 System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版: https://github.com/donnemarti…

『C语言进阶』指针进阶(一)

🔥博客主页: 小羊失眠啦 🔖系列专栏: C语言 🌥️每日语录:无论你怎么选,都难免会有遗憾。 ❤️感谢大家点赞👍收藏⭐评论✍️ 前言 在C语言初阶中,我们对指针有了一定的…

合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)

页面 (Page) 当控件内容过多,无法在屏幕内完整显示时,可让其在 页面 内显示。 示例代码 page lvgl.page_create(lvgl.scr_act(), nil) lvgl.obj_set_size(page, 150, 200) lvgl.obj_align(page, nil, lvgl.ALIGN_CENTER, 0, 0)label lvgl.label_crea…

【Spring Boot】SpringBoot 2.6.6 集成 SpringDoc 1.6.9 生成swagger接口文档

文章目录 前言一、SpringDoc是什么?二、使用步骤1.引入库2.配置类3.访问测试 总结其他配置立个Flag 前言 之前常用的SpringFox在2020年停止更新了,新项目集成SpringFox出来一堆问题,所以打算使用更活跃的SpringDoc,这里简单介绍一…

Nomad 系列-快速上手

系列文章 Nomad 系列文章 Nomad 重要术语 Nomad 安装设置相关术语 agent - 代理。Agent 是在 Server(服务器) 或 Client(客户端) 模式下运行的 Nomad 进程。client - 客户端。Nomad 客户端负责运行分配给它的任务。它还向服务器…

centos编译升级cmake,痛苦的Linux小白

环境 root 用户 下载 cmake官网下载地址:https://cmake.org/download/ 获取下载地址,右击cmake-3.27.4.tar.gz 命令行输入链接地址,下载 wget https://github.com/Kitware/CMake/releases/download/v3.27.4/cmake-3.27.4.tar.gz解压 tar -zx…

如何重置 docker中的mariadb的root

停止 Mariadb 容器&#xff1a;运行以下命令停止正在运行的 Mariadb 容器&#xff1a; docker stop <container_name>将 <container_name> 替换为你的 Mariadb 容器的名称或容器ID。 删除 Mariadb 容器&#xff1a;运行以下命令删除已停止的 Mariadb 容器&#x…