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字典基本操作实例分析
Jul 11 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
python调用matlab的m自定义函数方法
Feb 18 Python
Python异常处理例题整理
Jul 07 Python
python3实现的zip格式压缩文件夹操作示例
Aug 17 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
python实现斗地主分牌洗牌
Jun 22 Python
python numpy中setdiff1d的用法说明
Apr 22 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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加密解密函数分享
2014/06/05 PHP
PHP安全上传图片的方法
2015/03/21 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
使用Python发现隐藏的wifi
2020/03/04 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
小学生评语大全
2014/04/18 职场文书
欢迎新生标语
2014/10/06 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
先进党组织事迹材料
2014/12/26 职场文书
考研复习计划
2015/01/19 职场文书
教师自荐信范文
2015/03/06 职场文书
项目合作意向书
2015/05/08 职场文书
2016五一手机促销广告语
2016/01/28 职场文书