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中list列表的一些进阶使用方法介绍
Aug 15 Python
Python获取linux主机ip的简单实现方法
Apr 18 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
Python之py2exe打包工具详解
Jun 14 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
Python及PyCharm下载与安装教程
Nov 18 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
django rest framework 自定义返回方式
Jul 12 Python
python编写函数注意事项总结
Mar 29 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
基于php缓存的详解
2013/05/15 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
php实现数字补零的方法总结
2018/09/12 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
用js编写留言板
2020/03/17 Javascript
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
陈欧广告词
2014/03/14 职场文书
党员公开承诺书
2014/03/25 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
学生安全责任书模板
2014/07/25 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
运动会广播稿200字
2015/08/19 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript
MySQL存储过程及语法详解
2022/08/05 MySQL