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中使用正则表达式查找可嵌套字符串组
Oct 24 Python
python实现求最长回文子串长度
Jan 22 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
python复合条件下的字典排序
Dec 18 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 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
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
测试你的JS的掌握程度的代码
2009/12/09 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
Javascript中replace()小结
2015/09/30 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
浅析使用Python搭建http服务器
2019/10/27 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
生产部厂长助理职位说明书
2014/03/03 职场文书
工会主席事迹材料
2014/06/03 职场文书
社区科普工作方案
2014/06/03 职场文书
作风建设年活动总结
2014/08/27 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书