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的组合模式与责任链模式编程示例
Feb 02 Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 Python
Python+Opencv识别两张相似图片
Mar 23 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
浅谈Python 集合(set)类型的操作——并交差
Jun 30 Python
python添加模块搜索路径方法
Sep 11 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
Python爬虫beautifulsoup4常用的解析方法总结
Feb 25 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
详解python3类型注释annotations实用案例
Jan 20 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 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实现弹出消息提示框的两种方法
2013/12/17 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python中尾递归用法实例详解
2015/04/28 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
Python 类的特殊成员解析
2018/06/20 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
keras K.function获取某层的输出操作
2020/06/29 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
医学专业大学生求职的自我评价
2013/11/27 职场文书
生日派对邀请函
2014/01/13 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers