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读写文件方法总结
Jun 09 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
Python中django学习心得
Dec 06 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
python多进程下的生产者和消费者模型
May 07 Python
Python装饰器结合递归原理解析
Jul 02 Python
Python logging模块原理解析及应用
Aug 13 Python
python查询MySQL将数据写入Excel
Oct 29 Python
Python实现微信表情包炸群功能
Jan 28 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 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中OR与|| AND与&&的区别总结
2013/10/26 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
体育老师的教学自我评价分享
2013/11/19 职场文书
运动会广播稿30字
2014/01/21 职场文书
园艺师求职信
2014/03/10 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
腾讯广告词
2014/03/19 职场文书
经典团队口号
2014/06/06 职场文书
公司年底活动方案
2014/08/17 职场文书
上班离岗检讨书
2014/09/10 职场文书
班主任先进事迹材料
2014/12/17 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
python非标准时间的转换
2021/07/25 Python