python 如何快速复制序列


Posted in Python onSeptember 07, 2020

1 基本用法

把序列乘以一个整数,就会产生一个新序列。这个新序列是原始序列复制了整数份,然后再拼接起来的结果。

l=[1,2,3]
l2=l * 3
logging.info('l2 -> %s',l2)
l3=5 * 'deniro'
logging.info('l3 -> %s',l3)

运行结果:

INFO - l2 -> [1, 2, 3, 1, 2, 3, 1, 2, 3]
INFO - l3 -> denirodenirodenirodenirodeniro

* 复制语法不会修改原有的操作对象,而是构建出一个全新的序列。

2 列表陷阱

a * n 语法中,a 为列表,n 为需要复制的列表数。如果 a 列表中的元素是基本类型的话,没什么问题。但如果 a 列表中的元素是对象的引用的话,那么这些复制出来的列表中的引用其实指向的是同一个引用。

Luciano Ramalho 举了一个井字棋示例。

井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),任意三个标记形成一条直线,则为获胜。

python 如何快速复制序列

(1)错误示例 1

weird_board = [['_'] * 3] * 3
logging.info('weird_board -> %s', weird_board)
weird_board[1][2] = 'X'
logging.info('weird_board -> %s', weird_board)

运行结果:
INFO - weird_board -> [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
INFO - weird_board -> [['_', '_', 'X'], ['_', '_', 'X'], ['_', '_', 'X']]

可以看到虽然代码中只修改了 [1][2] 位置的值,但却影响到了三处地方。这就说明这三处其实指向的是同一个引用。

(2)错误示例 2

这个示例犯的错与前一个示例相同,都是把同一个对象追加到同一块游戏板中(board)。

row = ['_'] * 3
board = []
for i in range(3):
  board.append(row)
logging.info('board -> %s', board)
board[1][2] = 'X'
logging.info('board -> %s', board)

运行结果:

INFO - board -> [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
INFO - board -> [['_', '_', 'X'], ['_', '_', 'X'], ['_', '_', 'X']]

(3)正确示例

对示例 2 进行改造,就可以避免上述问题。

board = []
for i in range(3):
  row = ['_'] * 3
  board.append(row)
logging.info('board -> %s', board)
board[1][2] = 'X'
logging.info('board -> %s', board)

运行结果:

INFO - board -> [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
INFO - board -> [['_', '_', '_'], ['_', '_', 'X'], ['_', '_', '_']]

这里把 row = ['_'] * 3 放入 for 循环中,这样每一次循环都会新建一个 row,然后再放入游戏板中。这样游戏板中的每一个单元格都是独立的,互不影响。

利用列表推导方法,还可以简化示例代码:

board = [['_'] * 3 for i in range(3)]
logging.info('board -> %s', board)

board[1][2] = 'X'
logging.info('board -> %s', board)

以上就是python 如何快速复制序列的详细内容,更多关于python 复制序列的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python ipset管理 增删白名单的方法
Jan 14 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
Pytorch之finetune使用详解
Jan 18 Python
python各层级目录下import方法代码实例
Jan 20 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
Python reques接口测试框架实现代码
Jul 28 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
python asyncio 协程库的使用
Jan 21 Python
python入门之算法学习
Apr 22 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 #Python
python 装饰器的实际作用有哪些
Sep 07 #Python
通俗讲解python 装饰器
Sep 07 #Python
彻底搞懂python 迭代器和生成器
Sep 07 #Python
python如何设置静态变量
Sep 07 #Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 #Python
浅谈Python描述数据结构之KMP篇
Sep 06 #Python
You might like
php中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
学生信息管理系统python版
2018/10/17 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
python ssh 执行shell命令的示例
2020/09/29 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
关于环保的建议书400字
2014/03/12 职场文书
元旦寄语大全
2014/04/10 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis