1、list 列表

  有序集合,随时增删。包含的数据类型可以不同:整数、浮点数、字符串、list、tuple、dict、set、bool、空值、常量。

  list = [12, 'Yummy', 19.2, [1, 3, 'zhan']]

  • list名为列表,相当于一个数组

  • list列表是有序的,其中的每个元素都分配一个位置索引,索引值从0开始

  • list的长度是自动变化的

  • list列表元素不必都是同一种类型

  • list列表可以进行截取、组合、修改、增加等操作

  • list列表中的元素用中括号[]来表示

  函数:len()、append()、remove()移除列表中某个值的第一个匹配项、insert()、pop()、sort()、del、list()、reverse()、index()从列表中找出某个值第一个匹配项的索引位置、count()统计某个元素在列表中出现的次数、extend()在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

  删除:del list1[0]

  元祖转换为列表:tuple-->list  list(tuple)

  append(value)把元素添加到末尾、insert(i,value)把元素添加到任意位置;pop()删除末尾元素、pop(i)删除指定位置的元素、remove(value)直接删除某个元素值;list1.sort()对元素进行排序

  取值:list1[0]、list1[4:]、list1[:-4]、list1[2:-3],嵌套:list里面可以嵌套list从而形成类似于二维、三维、多维数组的。

2、tuple 元组

  tuple = (3.14,'yu',[3,1,2])

   tuple[1] = 'a'

  python内置的数据类型,有序列表,一旦初始化,无法修改。tuple不可变,所以代码更安全。可以看做是一种“不变”的List,即tuple一旦创建完毕,就不能修改了。

  Tuple元组中的元素用小括号()来表示。

3、dict 词典  

  d={'Michael': 95, 'Bob': 75, 'Tracy': 85}

  键值对(key-value)方式存储,查找速度快;dict的key必须是不可变对象(字符串、数字、元祖);相当于一个HashMap。

  • Dictionary字典查找速度快,但是代价是耗费的内存大。List相反,占用内存小,但是查找速度慢。这就好比是数组和链表的区别

  • Dictionary字典没有顺序,而List是有序的集合,所以不能用Dict来存储有序集合

  • Dictionary字典的Key不可变,Value可变。一旦一个键值对加入dict后,它对应的key就不能再变了,但是Value是可以变化的

  • Dictionary字典中的Key不可重复

  • Dictionary字典中的元素用中花括号{}来表示

4、set 无序集合、key不重复

  set = set(['A','B','C','B','C'])

  要创建一个set,需要提供一个list作为输入集合。

  无索引、无切片、作为一个无序的集合,set不记录元素位置或者插入点。因此,set不支持 indexing, slicing, 或其它类序列(sequence-like)的操作

  set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

  • set就像是把Dict中的key抽出来了一样,类似于一个List,但是内容又不能重复

  • set集合是无序的

  • set集合通过调用set()方法创建

5、总结:

  •      1、list、tuple是有序列表;dict、set是无序列表
  •      2、list元素可变、tuple元素不可变
  •      3、dict和set的key值不可变,唯一性
  •      4、set只有key没有value
  •      5、set的用途:去重、并集、交集等
  •      6、list、tuple:+、*、索引、切片、检查成员等
  •      7、dict查询效率高,但是消耗内存多;list、tuple查询效率低、但是消耗内存少

6、Python 的参数传递

  1. 对于不可变对象作为函数参数,相当于C系语言的值传递;
  2. 对于可变对象作为函数参数,相当于C系语言的引用传递。

  tuple,number等为不可变对象,list等对象是可变对象。但是这样理解从结果上理解是正确的,从原理上说,前面已经说过了,python一切对象传递的都是地址,不同的是,在函数内部转换的过程不一样。

代码解释: 
  在程序内部,test_list的地址和test_number的地址都传递都函数test中去。 
  执行.pop()操作的时候,是在原地址上进行操作,因此会改变原来的值。 
  执行+1操作的时候,test_number + 1 = 2,开辟了一段内部地址指向了2,局部地址(局部对象)指向了这个新对象2,原来的test_number并没有改变,因此原来的test_number并不会改变。 
  同理:如果将test_list.pop()改成 test_list = [1],那么原来的test_list的地址也不会改变,即print test_lists仍然会打印出 [1,2,3]。

def test(test_list, test_number):
test_list.pop()
test_number = test_number + 1 # 参数分别为list类型和number类型, 也就是一个是可变对象,一个是不可变对象
test_list = [1, 2, 3]
test_number = 1 test(test_list, test_number) print test_list # 输出[1, 2]
print test_number # 输出[1]

举例说明:

show me the code

def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list

  这段代码是初学者最容易犯的错误,用可变(mutable)对象作为参数的默认值。函数定义好之后,默认参数 a_list 就会指向(绑定)到一个空列表对象,每次调用函数时,都是对同一个对象进行 append 操作。因此这样写就会有潜在的bug,同样的调用方式返回了不一样的结果。

>>> print bad_append('one')
['one']
>>> print bad_append('one')
['one', 'one']

  而正确的方式是,把参数默认值指定为None,指定一个新的地址,保存变量

def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list

Python — List、Set、Tuple、Dictionary之间的区别、参数传递的更多相关文章

  1. list,string,tuple,dictionary之间的转换

    list,string,tuple,dictionary之间的转换 类型 String List tuple dictionary String - list(str), str.split() tu ...

  2. Python中list,tuple,dict,set的区别和用法

    Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...

  3. Python中list,tuple,dict,set的区别和用法(转)

    原文地址:http://www.cnblogs.com/soaringEveryday/p/5044007.html Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个 ...

  4. python中list/tuple/dict/set的区别

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是列表list和元组t ...

  5. Python 之 copy() 与 deepcopy() 之间的区别

    在 Python 之中,如果想要复制一个对象就免不了要理解浅复制与深复制.这也是 Python 与其他语言的区别之一. Python 的数据存储方式与其他语言不同.当你定义了一个变量: a = [, ...

  6. Python的实例方法,类方法,静态方法之间的区别及调用关系

    如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...

  7. Python中内置数据类型list,tuple,dict,set的区别和用法

    Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...

  8. Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  9. python中,== 与 is 之间区别

    在python中,== 与 is 之间既有区别,又有联系,本文将通过实际代码的演示,力争能够帮助读到这篇文章的朋友以最短的时间理清二者的关系,并深刻理解它们在内存中的实现机制. 扯淡的话不多说,下面马 ...

随机推荐

  1. <2014 05 21> 互联网时代的C语言——Go

    Go希望成为互联网时代的C语言. 多数系统级语言(包括Java和C#)的根本编程哲学来源于C++,将C++的面向对象进一步发扬光大.但是Go语言的设计者却有不同的看法,他们认为C++ 真的没啥好学的, ...

  2. Babel编译

    Babel的目的就是让你可以使用最新的标准来开发,然后把兼容的问题交给它来完成.比如我如何在使用ES6的语法写完之后将其转换为ES5满足通用性呢? 先用这个最常用的Babel的用法来引入吧. 一  首 ...

  3. django使用celery实现异步操作

    需求: django支持的http请求都是同步的,对于需要耗时较长的操作可能会导致阻塞.为此我们需要引入异步处理机制,即收到客户端请求后立即给予响应,具体任务交给另一个进程处理. 使用方法: 1. 安 ...

  4. 关于session的常用用法

    (一)django有四中session实现方式 1.数据库(database-backed sessions) 2.缓存(cached sessions) 3.文件系统(file-based sess ...

  5. android6.0获取通讯录权限

    android6.0中,获取通讯录的权限是    <uses-permission android:name="android.permission.GET_ACCOUNTS" ...

  6. XMPP环境搭建 (mac环境下 安装自己独立的mysql与服务器(openfire),实现即时聊天功能)

    1简单概览 [一]XMPP简介 http://xmpp.org 即时通讯技术 IM - Instant Messaging ⽀支持⽤用户在线实时交谈.交谈双⽅方都需要⼀一个聊天窗⼝口,其中⼀一个⽤用户 ...

  7. (转)牛B的代码不一定是好代码

    最近经常做业务逻辑代码review的工作,发现各种风格的代码,其中有一种是封装和抽象做的非常的多,代码层次非常的深入,表面给人感觉是:牛逼的代码. 但是从清晰度和可维护性来说,还是不推荐这么做. 1. ...

  8. php 内存泄漏

    所谓内存泄漏是指进称在执行过程中,内存的占有率逐步升高,不释放, 系统所拥有的可用内存越来越少的现象. php-fpm耗光内存,不释放,就是所谓的内存泄漏,内存泄漏对长期运行的程序有威胁,所以应该定期 ...

  9. mongodb-2.6.0 在win7 64下的安装和服务启动

    转自: http://blog.csdn.net/lingchen214/article/details/24537629 1   自定义安装到C:\mongodb目录下. 2  手动在C:\mong ...

  10. hadoop nn 运维一例

    nn1 崩溃之后,nn2变为active,但是nn1日志中有异常,处于standby状态的,无法响应读的操作 最后查出原因是因为fensing的问题.