我知道单子上的理解可以做到这一点,但我想知道是否还有一个更短(更多的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次的列表相关推荐

  1. python判断质数的函数并输出_【python基础】|| 用python判断输入的数是否为素数

    微信公众号:龙跃十二 我是小玉,一个平平无奇的小天才!持续更新,欢迎关注! 用心分享,共同成长 没有什么比你每天进步一点点更实在了 本文已经收录至我的GitHub,欢迎大家踊跃star . https ...

  2. python实现excel筛选功能并输出_用python处理excel数据(七)实现excel表中筛选功能...

    excel数据如下 1.年龄大于等于5岁的孩子 loc方法通过标签或者bool数组选取一些行和列.注意 loc后边跟的是方括号[]: 调用series的方法apply(), apply(age_5)接 ...

  3. python按列输出_在python中创建漂亮的列输出

    我试图在python中创建一个很好的列列表,用于我创建的命令行管理工具. 基本上,我想要一个列表,如: [['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a' ...

  4. python文件读取输出-python分批定量读取文件内容,输出到不同文件中的方法

    一.文件内容的分发 应用场景:分批读取共有358086行内容的txt文件,每取1000条输出到一个文件当中 # coding=utf-8 # 分批读取共有358086行内容的txt文件,每取1000条 ...

  5. python怎么横着输出_对python3中, print横向输出的方法详解

    对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...

  6. python字典排序并输出_对Python的字典进行排序

    我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...

  7. python花式输出_关于python字符串format的一些花式用法

    目录: 前提: python中字符串的format功能非常强大,可以说完全能够替代其他的字符串使用方法,但是在后期的项目开发中使用的并不是特别的多, 以至于想用的时候会想不起来准确的使用方法,所以在这 ...

  8. python查找数列中重复数字_在数组中找出重复的数字(异或法)

    购买本课程后,可以加51CTO学院李宁老师官方交流群:550369460注意,该群只允许购买李宁老师课程的学员进行技术交流,加群时需要提供在51CTO购买李宁老师课程的订单编号(任何一个课程的订单编号 ...

  9. python list去重并删除某些元素_使用Python实现list(列表)中的重复元素删除,例如: X= [1,1,2,a,a,[1,2,3]] 去重后:X= 「1,2,a,[1,2...

    题目要求的实质是列表内部元素的去重,有两种思路:第一种,删除的思路,判断列表中的元素是否出现重复,如果有重复,删除重复出现的元素直到剩下最后一个:第二种,添加的思路,新建空列表,将新列表中不包含.原列 ...

  10. python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...

    在这篇文章里,我会来阐述下为什么我觉得 Python 对于计算机编程入门教学来说是一门很棒的编程语言(对基础编程课程更多观点可以查看这篇文章).这也是从我针对初学者Python 编程教学过程中获得并总 ...

最新文章

  1. CV多任务学习笔记 yolop
  2. 解决方案需求提升 安防工程细节化事项要了解
  3. gifcam录制动态图后导入photoshop出现透明格子怎么办?
  4. 笔记-信息系统开发基础-面向对象基本概念-对象和类
  5. html中简单轮播图实现原理,常见轮播效果及其实现原理
  6. Tomcat 的运行机制
  7. 20款Notepad++插件下载和介绍
  8. RHQ指标的WildFly子系统
  9. 因政府禁令 微软 Windows 9 将作出重大调整
  10. 内存占用少,计算速度快!华为诺亚方舟Lab开源即插即用的多用卷积核(NeurIPS 2018)...
  11. html微软雅黑字体模糊,WinXP中微软雅黑字体模糊看得很吃力怎么解决
  12. mysql从库新增_MySQL新增从库
  13. paip.python ide eric5-5.3.7 安装以及建立项目使用 最佳实践
  14. linux自动补全快捷键,linux常用快捷键
  15. C语言冒泡排序算法详解
  16. 汽车维修企业管理【1】
  17. 鲁迅《狂人日记》全文
  18. matlab函数关系式,怎么用MATLAB建立数据间的函数关系
  19. 完美解决python3.6环境下,使用pyinstaller打包.exe时报错的情况。
  20. 第4章 网络信息资源检索

热门文章

  1. MySQL单表数据量过大的处理方式经验
  2. 十个 Python 自动化常用操作
  3. 整车行业 SAP APO 开发备忘(刘欣)
  4. 微软亚洲研究院2017年笔试编程题
  5. Drug Discov. Today | 药物发现中的先进机器学习技术
  6. 功能强大的在线网页编辑器
  7. CentOS 7.6镜像下载
  8. REST Assured 1 - REST Assured 介绍
  9. 小米机顶盒安装第三方软件流程
  10. 好有成就感。。。又编了一个扫雷