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删除指定目录下过期文件的2个脚本分享
Apr 10 Python
Python使用新浪微博API发送微博的例子
Apr 10 Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
python实现自动化上线脚本的示例
Jul 01 Python
Django后台admin的使用详解
Jul 08 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
python3代码输出嵌套式对象实例详解
Dec 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 strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
浅说js变量
2011/05/25 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
Node.js模块加载详解
2014/08/16 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Python sys模块常用方法解析
2020/02/20 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
英文简历中的自我评价用语
2013/12/09 职场文书
《乞巧》教学反思
2014/02/27 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
学校捐书活动总结
2015/05/08 职场文书
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫