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脚本来实现最简单的FTP下载的教程
May 04 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
django 简单实现登录验证给你
Nov 06 Python
Python遍历字典方式就实例详解
Dec 28 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
Python之多进程与多线程的使用
Feb 23 Python
python 如何做一个识别率百分百的OCR
May 29 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 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来处理多个提交任务
2008/05/08 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
php判断表是否存在的方法
2015/06/18 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
jQuery.each使用详解
2015/07/07 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
Python标准库笔记struct模块的使用
2018/02/22 Python
python实现朴素贝叶斯算法
2018/11/19 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
国际贸易系求职信
2014/08/09 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
商业门面租房协议书
2014/11/25 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS