Python如何把列表自定义分组后并重复2次

news2024/12/24 9:13:44

一、问题的由来

之前,我写过一篇调用同花顺机器翻译api,批量翻译字幕的文章。

在调用机器翻译api过程中,我遇到一个问题,就是网站给的Python样例代码中只接收字符长度少于5000的列表,所以我想,如果我们一句一句把句子传给服务器翻译,那么程序的运行速度一定会很慢,如果我们把由30~50个字符串元素组成的列表传递给翻译服务器,运行效率一定会大大提高。

但是,如何进行列表元素分组,并且保证字符串的总长度少于5000,一直是困扰我的难题。今天我一直找到了答案。

二、问题的解决

上面的问题,我简化为如下问题:把一个列表中的元素自定义分组,然后判断分组后的字符串长度是否小于一定长度。

为了进一步加快程序运行速度,简化算法,我们先定义一个函数,函数接受一个列表和一个整数。

def chunks(lst:list,n:int):
    for i in range(0,len(lst),n):
        yield lst[i:i+n]

列表是要分组的列表,整数是分组后元素的个数。为了加快程序执行速度,我们定义参数时,直接声明了参数的类型,如lst参数是列表,n是整数型,同时在函数中用yield直接给出解决,而不是在遍历结束后给出结果,也就是用生成器取代了列表,加快了程序的执行速度。

然后,我们再定义一个sample,来应用上这个程序:

def chunks(lst:list,n:int):
    for i in range(0,len(lst),n):
        yield lst[i:i+n]
        
sample:list[str] = ['a','b','c','d','e']

new = list(chunks(sample,3))

print(new)

最终我们把返回的生成器再转化为列表,结果就是:

[['a', 'b', 'c'], ['d', 'e']]

三、问题的深入

分组成功后,我们就可以遍历新的列表new,然后把新的分组列表传给远程服务器,进行机器翻译。

如果还要加上判断是否字符长度小于5000,可以用下面的代码。

for li in new:
    if len(" ".join(li))<5000:
          translate(api, li) #这里假定翻译函数名是translate()

实现这些任务后,我们还可以继续深入分析,如果把这些分组元素再重复2次,简单的说就是把下面的列表:

[['a', 'b', 'c'], ['d', 'e']]

变成下面的列表

['a','b','c','a','b','c','d', 'e','d', 'e']

并且展开成一个列表怎么操作呢?其实我们可以借用之前用到的方法,

最终我们得到以下代码:

def chunks(lst:list,n:int):
    for i in range(0,len(lst),n):
        yield lst[i:i+n]
        
sample:list[str] = ['a','b','c','d','e']

new = list(chunks(sample,3))

print([elm for i in new for elm in i*2])

生成的结果:

在以上代码中,我们用列表推导式把列表元素重复2遍,并展开所有子列表。如果是列表元素重复2次,把列表推导式中的i变成[i],这样就可以实现子列表的重复。

print([elm for i in new for elm in [i]*2])

四、学后反思

  1. 可以通过声明变量类型、使用生成器、列表推导式等方法可以简化算法,加快程序的运行速度。
  2. 变量声明又上了新高度,声明一个列表变量用:sample:list[str] = ['1','2','3'],直接规定变量类型为列表,而且列表中的元素类型也规定为字符。

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

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

相关文章

Docker常用命令(+仓库,镜像,容器的关系)

一、仓库&#xff08;repository&#xff09;&#xff0c;镜像&#xff08;image&#xff09;&#xff0c;容器&#xff08;container&#xff09;的关系 Docker 是一个开源的C/S架构应用容器引擎&#xff08;客户端&#xff08;client&#xff09;和服务端&#xff08;server&…

Android实现一个可拖拽带有坐标尺的进度条

拿到上边的UI效果图&#xff0c;给我的第一印象就是这实现起来也太简单了吧&#xff0c;SeekBar轻轻松松就搞定了&#xff0c;换个thumb&#xff0c;加个渐变不就完成了&#xff0c;说搞就搞&#xff0c;搞着搞着就抑郁了&#xff0c;底部坐标尺还能搞&#xff0c;等比例分割后…

Springboot开发微信小游戏后台-玩家登录流程

最近使用Springboot开发了一个微信小游戏的后台服务&#xff0c;为小游戏提供接口&#xff0c;其中登录需要前后端与微信服务端配合。 注意使用自己开发的服务作为小游戏后端&#xff0c;前提条件是必须要有域名证书&#xff0c;提供https服务&#xff0c;否则在微信正式环境下…

QT Creator写一个简单的电压电流显示器

前言 本文主要涉及上位机对接收的串口数据处理&#xff0c;LCD Number控件的使用。之前的一篇写一个简单的LED控制主要是串口发出数据&#xff0c;这里再看一下怎么接收数据处理数据&#xff0c;这样基本就对串口上位机有简单的认识了。 LCD Number显示时间 这一小节通过用一…

从实现到原理,我总结了11种延迟任务的实现方式

延迟任务在我们日常生活中比较常见&#xff0c;比如订单支付超时取消订单功能&#xff0c;又比如自动确定收货的功能等等。 所以本篇文章就来从实现到原理来盘点延迟任务的11种实现方式&#xff0c;这些方式并没有绝对的好坏之分&#xff0c;只是适用场景的不大相同。 DelayQu…

【python】js逆向基础案例——有道翻译

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 课程亮点: 1、爬虫的基本流程 2、反爬的基本原理 3、nodejs的使用 4、抠代码基本思路 环境介绍: python 3.8 pycharm 2022专业版 >>> 免费使用教程文末名片获取 requests >>> pip install req…

Vue 配置正向代理的使用

浏览器对于用户的安全考虑&#xff0c;设置了同源策略。同源策略就是指协议、域名、端口都要相同的情况下&#xff0c;才能请求资源。 跨域&#xff1a; 跨域指的是&#xff1a;在浏览器中&#xff0c;从一个域名去请求另一个域名的资源时&#xff0c;如果协议、域名、端口任意…

深入理解 SpringBoot 日志框架:从入门到高级应用——(六)Log4j2 输出日志到 QQ邮箱

文章目录 获取 QQ 邮箱授权码添加依赖编写 SMTPAppender运行结果 要实现将 log4j2 输出日志到 QQ 邮箱&#xff0c;需按照以下步骤进行&#xff1a; 在 QQ 邮箱中设置 SMTP 服务&#xff0c;开启 POP3/SMTP 服务&#xff0c;获取 SMTP 服务地址、端口号、登录邮箱账号和密码。 …

拿捏指针(二)---对指针的进阶认识(中级)

文章目录 字符指针指针数组数组指针数组指针的定义&数组名与数组名的区别数组指针的使用 数组参数、指针参数一维数组传参二维数组传参一级指针传参二级指针传参 字符指针 我们知道&#xff0c;在指针的类型中有一种指针类型叫字符指针char * 。 字符指针的一般使用方法为…

Pytest自动化测试的三种运行方式

目录 1、主函数模式 2、命令行模式 3、通过读取pytest ini配置文件运行 &#xff08;最主要运用的方式&#xff09; 总结&#xff1a; Pytest 运行方式共有三种&#xff1a; 1、主函数模式 运行所有 pytest.main() 指定模块 pytest.main([-vs],,./testcase/test_day1.py)…

组合逻辑电路设计---多路选择器

目录 1、多路选择器简介 2、硬件设计 3、实验任务 4、程序设计 4.1、模块设计 4.2、绘制波形图 4.3、编写代码 &#xff08;1&#xff09;assign 中条件运算符&#xff08;三目运算符&#xff09;实现方法&#xff1a; &#xff08;2&#xff09;always 语句块中使用 …

逍遥自在学C语言 | 指针的基础用法

前言 在C语言中&#xff0c;指针是一项重要的概念&#xff0c;它允许我们直接访问和操作内存地址。 可以说&#xff0c;指针是C语言一大优势。用得好&#xff0c;你写程序如同赵子龙百万军中取上将首级&#xff1b;用得不好&#xff0c;则各种问题层出不穷&#xff0c;有种双…

.gitignore 忽略文件和目录

1. .gitignore 简介2. .gitignore 注释3. / 开头或结尾的忽略4. glob 模式匹配忽略5. .gitignore 全局忽略6. 忽略已提交到远程仓库的内容7. 使用各种框架下的忽略规则 1. .gitignore 简介 .gitignore 文件的作用就是告诉 git 哪些文件不需要添加到版本管理中&#xff08;定义…

Python如何制作图标点选验证码

本文讲解如何使用python中的opencv库来制作图标点选验证码 图标点选验证码制作起来非常简单,你只需要准备两部分数据集,数据集数量都不用很多,背景图我选择了20个左右,大小为(300, 500)左右,图标我抓取了100多个,图标大小为(40,40)左右,图标由不同大小的透明度构成…

html实现好看的个人介绍,个人主页模板1(附源码)

文章目录 1.设计来源1.1 主界面1.2 关于我界面1.3 自我介绍界面1.4 项目演示界面1.5 个人成就界面1.6 联系我界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/13125310…

01-Maven 安装

一. 下载 apache官网下载 Maven&#xff1a;Maven – Download Apache Maven &#xff0c;根据需要下载不同压缩包。 二. 安装和配置 因为是压缩包不是可执行文件&#xff0c;直接将压缩包进行解压即可&#xff0c;最好放在无中文目录下解压。 1. 配置maven本地仓库 打开解压…

自然语言处理从入门到应用——静态词向量预训练模型:神经网络语言模型(Neural Network Language Model)

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 《自然语言处理从入门到应用——自然语言处理的语言模型&#xff08;Language Model&#xff0c;LM&#xff09;》中介绍了语言模型的基本概念&#xff0c;以及经典的基于离散符号表示的N元语言模型&#xff08;N-gram…

每日一道算法---数组中出现次数超过一半的数字

数组中出现次数超过一半的数字 1.题目2.思路3.代码 1.题目 链接: 数组中出现次数超过一半的数字 2.思路 【解题思路1】&#xff1a; 思路一&#xff1a;数组排序后&#xff0c;如果符合条件的数存在&#xff0c;则一定是数组中间那个数。这种方法虽然容易理解&#xff0c;但…

gcov的使用

什么是代码覆盖率&#xff1f; 代码覆盖率是对整个测试过程中被执行的代码的衡量&#xff0c;它能测量源代码中的哪些语句在测试中被执行&#xff0c;哪些语句尚未被执行。 代码覆盖率的指标种类 代码覆盖率工具通常使用一个或多个标准来确定你的代码在被自动化测试后是否得…

SQL注入第一章节

SQL注入第一章节 1.1 什么是SQL注入 SQL 注入&#xff08;Injection&#xff09; 概述 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情…