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 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
python的else子句使用指南
Feb 27 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python中实现精确的浮点数运算详解
Nov 02 Python
python在ubuntu中的几种安装方法(小结)
Dec 08 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
Python中Unittest框架的具体使用
Aug 27 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
python实现人脸签到系统
Apr 13 Python
Python List remove()实例用法详解
Aug 02 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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
php.ini 中文版
2006/10/28 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
python 图片验证码代码
2008/12/07 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
Python 多进程原理及实现
2020/12/21 Python
python自动化办公操作PPT的实现
2021/02/05 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
天下第一关导游词
2015/02/06 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫
golang定时器
2022/04/14 Golang