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中数据解析
May 05 Python
Python脚本暴力破解栅栏密码
Oct 19 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
Python中偏函数用法示例
Jun 07 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
python简单贪吃蛇开发
Jan 28 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
tensorflow的计算图总结
Jan 12 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 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
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
vue实现简单计算商品价格
2020/09/14 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python实现共轭梯度法
2019/07/03 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
C++面试题目
2013/06/25 面试题
接口的多继承会带来哪些问题
2015/08/17 面试题
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
自我鉴定三原则
2014/01/13 职场文书
机关门卫制度
2014/02/01 职场文书
三八节主持词
2014/03/17 职场文书
售后服务承诺书模板
2014/05/21 职场文书
正科级干部考察材料
2014/05/29 职场文书