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 相关文章推荐
12步入门Python中的decorator装饰器使用方法
Jun 20 Python
python如何让类支持比较运算
Mar 20 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
Python实现分段线性插值
Dec 17 Python
python对常见数据类型的遍历解析
Aug 27 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
Python接口自动化测试的实现
Aug 28 Python
python中的对数log函数表示及用法
Dec 09 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者的疑难问答(2)
2006/10/09 PHP
介绍php设计模式中的工厂模式
2008/06/12 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
PHP7 windows支持
2021/03/09 PHP
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
python创建文件备份的脚本
2018/09/11 Python
python查看模块,对象的函数方法
2018/10/16 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
WxPython建立批量录入框窗口
2019/02/27 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
安全生产计划书
2014/05/04 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
考试没考好检讨书
2015/05/06 职场文书
矛盾论读书笔记
2015/06/29 职场文书