python中的list的*运算使用过程中遇到的问题

目的:

想生成一个[[],[],[]] 这样的列表,

所以就 [[]]*3 这样做了,但是这样做会有问题,这样list中的三个list其实是同一个list。

例如:a=[[]]*3,然后a[0].append(1),

然后a就变成这样了:[[1],[1],[1]]

验证一下,发现表达式 a[0] is a[1] 的值为True。

如何解决呢,可以用列表生成器:a=[[] for i in range(3)]

这应该像是值类型和引用类型的区别,但是翻看python的文档时没发现有类似的说法,不过在翻看文档时发现里面提到了这个情形:

https://docs.python.org/3.6/library/stdtypes.html

内容摘录如下:

Note that items in the sequence s are not copied; they are referenced multiple times. This often haunts new Python programmers; consider:

>>>

>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]

What has happened is that [[]] is a one-element list containing an empty list, so all three elements of [[]] * 3 are references to this single empty list. Modifying any of the elements of lists modifies this single list. You can create a list of different lists this way:

>>>

>>> lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]

原文地址:https://www.cnblogs.com/vanwoos/p/9217130.html

时间: 2024-10-08 03:38:05

python中的list的*运算使用过程中遇到的问题的相关文章

标准动作中犯的错误,使用过程中忘记写结束符号所发生的错误

例如 错误写法: <jsp:getProperty property="userName" name="user" > 正确写法:<jsp:getProperty property="userName" name="user" /> 导致的异常: HTTP Status 500 - type Exception report message description The server encounte

Python说文解字_继承过程中的参数集合

1. 先看一段属性继承的代码: class User: def __init__(self,name,age): self.name = name self.age = age class User1(User): def __init__(self,name,age,height,weight): self.height = height self.weight = weight # 此处像继承父类的name 和 age super().__init__(name, age) user1 =

eclipse中导入jsp等工程使用过程中常遇问题

1.导入的工程JSP文件出现报错的情况 这个一般不怎么影响文件的执行,这些文件飘红主要是因为eclipse的校验问题. 具体错误信息:Multiple annotations found at this line 处理方法: 在eclipse中设置相关的一些属性,如下[window]->[preferences]->[validation],找到后將JSP文件的bulid和manual两栏的勾去掉在刷新工程即可.如下图所示 2.在控制台中出现了严重:listener之类的问题 放在出错文件上出

个人学习C++过程中对const的总结:初始化系列之用字面值常量与其他类型的值初始化的区别(一)

const这个系列博大精深,在学习过程一点一点积累记录.但是由于随笔在发布之后不能修改,有了新的想法之后不能再在原随笔上修改,只好用一个个系列来慢慢积累. 哈哈,在发布之后发现是可以继续编辑的,好吧,不管了,这种方式挺好. 正文: 昨晚接触到一个算法题目,回文字符串,在网上找了某段代码,但是发现有点问题,原形大概如下: .... const int len=mystr.size(); //mystr是string的一个实例,其实我挺奇怪这里为什么用int而不是string::size_type或

oracle 安装过程中的注意事项

场景描述: oracle 安装过程中,dbca创建数据库的过程中,出现标题中的错误! 检测确认环境:防火墙已经关闭. 原因是:这里有一个需要注意的事项,在设置oracle数据库用户(sys,system...)密码的时候,密码中不能含有“@”符号!!!否则安装过程会报ora-12145错误. 操作建议: 出现上述错误,虽然选择ignore忽略可以继续安装,后续数据库也能正常使用. 但是,这里的操作建议是,先选择忽略该报错选项,继续安装,完成之后,重新执行dbca,将刚才创建的数据库删除,然后再重

关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思

最近在项目研发中的关于线程池应用过程中由于业务逻辑异常导致的线程中断,但程序未中断导致的脏数据问题  话不多说,在最近最新的一个版本发布过程中,业务需要,我们要定期去给客户预留出可用的资源数据,提供客户使用,在版本即将上线前一周测试过程中,遇到的预留资源数据跟实际数据不匹配,刚开始反复检查代码,通过日志调试一直无果,经过不懈努力,最终终于发现是由于线程在跑业务时,抛出未知异常,当前线程中断,然而主程序并未异常,导致最终响应的数据与实际不符.下面我就简答举例说明下这个问题 1.获取资源数据demo

WPF drag过程中显示ToolTip.

原文:WPF drag过程中显示ToolTip. 在drag/drop过程中,我们在判断出over的元素上是否可以接受drag的东西之后,通常是通过鼠标的样式简单告诉用户这个元素不接受现在drag的内容,但是用户通常不知道具体的原因,有时候为了增强客户体验,会在over的过程中显示tooltip来告诉用户为什么不能接受drag的东西或者告诉用户over的元素是什么东西,特别是一些绘图或者其他一些复杂的应用软件,这种方式比较广泛. WPF 给各种控件提供了ToolTip属性,可以通过设置该属性的值

Python爬虫(图片)编写过程中遇到的问题

最近我突然对网络爬虫开窍了,真正做起来的时候发现并不算太难,都怪我以前有点懒,不过近两年编写了一些程序,手感积累了一些肯定也是因素,总之,还是惭愧了.好了,说正题,我把这两天做爬虫的过程中遇到的问题总结一下: 需求:做一个爬虫,爬取一个网站上所有的图片(只爬大图,小图标就略过) 思路:1.获取网站入口,这个入口网页上有很多图片集合入口,进入这些图片集合就能看到图片链接了,所以爬取的深度为2,比较简单:2.各个子图片集合内所包含的图片链接有两种形式:一种是绝对图片路径(直接下载即可),另一种的相对

安装python caffe过程中遇到的一些问题以及对应的解决方案

关于系统环境: Ubuntu 16.04 LTS cuda 8.0 cudnn 6.5 Anaconda3 编译pycaffe之前需要配置文件Makefile.config 1 ## Refer to http://caffe.berkeleyvision.org/installation.html 2 # Contributions simplifying and improving our build system are welcome! 3 4 # cuDNN acceleration