python将一句话重复n次输出_在Python中创建单项重复n次的列表
我知道单子上的理解可以做到这一点,但我想知道是否还有一个更短(更多的Python?)接近。
我想创建一系列长度不同的列表。每个列表将包含相同的元素e,重复n次(其中n=列表的长度)。如何创建列表,而不做
[e for number in xrange(n)]
对于每个列表?
你也可以写:
[e] * n
号
您应该注意,如果e是一个空列表,那么您会得到一个对同一个列表有n个引用的列表,而不是n个独立的空列表。
性能测试
乍一看,repeat似乎是创建具有n个相同元素的列表的最快方法:
>>> timeit.timeit('itertools.repeat(0, 10)', 'import itertools', number = 1000000)
0.37095273281943264
>>> timeit.timeit('[0] * 10', 'import itertools', number = 1000000)
0.5577236771712819
但是等等-这不是一个公平的测试…
>>> itertools.repeat(0, 10)
repeat(0, 10) # Not a list!!!
。
函数itertools.repeat实际上并不创建列表,它只是创建一个对象,如果您愿意,可以使用该对象创建列表!让我们再试一次,但转换为列表:
>>> timeit.timeit('list(itertools.repeat(0, 10))', 'import itertools', number = 1000000)
1.7508119747063233
所以如果你想要一个列表,使用[e] * n。如果您希望惰性地生成元素,请使用repeat。
用相同元素创建列表的性能不太可能是Python程序性能的关键组件。
如上所述,如果e是一个空列表,那么ecx1〔0〕可能会产生意外的结果。要创建唯一的空子列表,请用于理解:[[] for i in range(0,n)]。
>>> [5] * 4
[5, 5, 5, 5]
。
当要重复的项目是列表时要小心。不会克隆列表:所有元素都将引用同一列表!
>>> x=[5]
>>> y=[x] * 4
>>> y
[[5], [5], [5], [5]]
>>> y[0][0] = 6
>>> y
[[6], [6], [6], [6]]
。
Create List of Single Item Repeated n Times in Python
号不可变项
对于不可变项(如无、字符串、元组或冻结集),可以这样做:
[e] * 4
。
请注意,这最好只用于列表中不可变的项(字符串、元组、冻结集),因为它们都指向内存中相同位置的相同项。当我必须用所有字符串的模式构建一个表时,我经常使用这个方法,这样就不必给出一对一的映射。
schema = ['string'] * len(columns)
可变项目
我已经使用Python很长一段时间了,我从来没有看到过一个用例,在这个用例中,我将使用一个可变的实例来完成上面的工作。相反,要得到一个可变的空列表、集合或dict,您应该这样做:
list_of_lists = [[] for _ in columns]
。
在这个上下文中,下划线只是一个一次性变量名。
如果你只有这个号码,那就是:
list_of_lists = [[] for _ in range(4)]
号
_并不是特别的,但是如果您不打算使用变量和任何其他名称,那么您的编码环境样式检查程序可能会抱怨。不可变项使用不可变方法的注意事项:
小心使用可变对象,当您更改其中一个对象时,它们都会更改,因为它们都是相同的对象:
foo = [[]] *4
foo[0].append('x')
号
foo现在返回:
[['x'], ['x'], ['x'], ['x']]
号
但对于不可变对象,您可以使其工作,因为您更改了引用,而不是对象:
>>> l = [0] * 4
>>> l[0] += 1
>>> l
[1, 0, 0, 0]
>>> l = [frozenset()] * 4
>>> l[0] |= set('abc')
>>> l
[frozenset(['a', 'c', 'b']), frozenset([]), frozenset([]), frozenset([])]
号
但同样,可变对象不适合这样做,因为就地操作更改了对象,而不是引用:
l = [set()] * 4
>>> l[0] |= set('abc')
>>> l
[set(['a', 'c', 'b']), set(['a', 'c', 'b']), set(['a', 'c', 'b']), set(['a', 'c', 'b'])]
号
itertools的功能就是:
import itertools
it = itertools.repeat(e,n)
当然,itertools会给您一个迭代器,而不是一个列表。[e] * n为您提供了一个列表,但是,根据您将如何处理这些序列,itertools变体可以更有效。
正如其他人所指出的,对可变对象使用*运算符会重复引用,因此,如果更改一个对象,则会全部更改。如果您想创建可变对象的独立实例,xrange语法是实现这一点的最简单的方法。如果您被一个从未使用过的命名变量所困扰,您可以使用匿名下划线变量。
[e for _ in xrange(n)]
号
[e] * n
号
应该工作
python将一句话重复n次输出_在Python中创建单项重复n次的列表相关推荐
- python判断质数的函数并输出_【python基础】|| 用python判断输入的数是否为素数
微信公众号:龙跃十二 我是小玉,一个平平无奇的小天才!持续更新,欢迎关注! 用心分享,共同成长 没有什么比你每天进步一点点更实在了 本文已经收录至我的GitHub,欢迎大家踊跃star . https ...
- python实现excel筛选功能并输出_用python处理excel数据(七)实现excel表中筛选功能...
excel数据如下 1.年龄大于等于5岁的孩子 loc方法通过标签或者bool数组选取一些行和列.注意 loc后边跟的是方括号[]: 调用series的方法apply(), apply(age_5)接 ...
- python按列输出_在python中创建漂亮的列输出
我试图在python中创建一个很好的列列表,用于我创建的命令行管理工具. 基本上,我想要一个列表,如: [['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a' ...
- python文件读取输出-python分批定量读取文件内容,输出到不同文件中的方法
一.文件内容的分发 应用场景:分批读取共有358086行内容的txt文件,每取1000条输出到一个文件当中 # coding=utf-8 # 分批读取共有358086行内容的txt文件,每取1000条 ...
- python怎么横着输出_对python3中, print横向输出的方法详解
对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...
- python字典排序并输出_对Python的字典进行排序
我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...
- python花式输出_关于python字符串format的一些花式用法
目录: 前提: python中字符串的format功能非常强大,可以说完全能够替代其他的字符串使用方法,但是在后期的项目开发中使用的并不是特别的多, 以至于想用的时候会想不起来准确的使用方法,所以在这 ...
- python查找数列中重复数字_在数组中找出重复的数字(异或法)
购买本课程后,可以加51CTO学院李宁老师官方交流群:550369460注意,该群只允许购买李宁老师课程的学员进行技术交流,加群时需要提供在51CTO购买李宁老师课程的订单编号(任何一个课程的订单编号 ...
- python list去重并删除某些元素_使用Python实现list(列表)中的重复元素删除,例如: X= [1,1,2,a,a,[1,2,3]] 去重后:X= 「1,2,a,[1,2...
题目要求的实质是列表内部元素的去重,有两种思路:第一种,删除的思路,判断列表中的元素是否出现重复,如果有重复,删除重复出现的元素直到剩下最后一个:第二种,添加的思路,新建空列表,将新列表中不包含.原列 ...
- python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...
在这篇文章里,我会来阐述下为什么我觉得 Python 对于计算机编程入门教学来说是一门很棒的编程语言(对基础编程课程更多观点可以查看这篇文章).这也是从我针对初学者Python 编程教学过程中获得并总 ...
最新文章
- CV多任务学习笔记 yolop
- 解决方案需求提升 安防工程细节化事项要了解
- gifcam录制动态图后导入photoshop出现透明格子怎么办?
- 笔记-信息系统开发基础-面向对象基本概念-对象和类
- html中简单轮播图实现原理,常见轮播效果及其实现原理
- Tomcat 的运行机制
- 20款Notepad++插件下载和介绍
- RHQ指标的WildFly子系统
- 因政府禁令 微软 Windows 9 将作出重大调整
- 内存占用少,计算速度快!华为诺亚方舟Lab开源即插即用的多用卷积核(NeurIPS 2018)...
- html微软雅黑字体模糊,WinXP中微软雅黑字体模糊看得很吃力怎么解决
- mysql从库新增_MySQL新增从库
- paip.python ide eric5-5.3.7 安装以及建立项目使用 最佳实践
- linux自动补全快捷键,linux常用快捷键
- C语言冒泡排序算法详解
- 汽车维修企业管理【1】
- 鲁迅《狂人日记》全文
- matlab函数关系式,怎么用MATLAB建立数据间的函数关系
- 完美解决python3.6环境下,使用pyinstaller打包.exe时报错的情况。
- 第4章 网络信息资源检索