## Python 中有四种用于存放数据的序列--list, tuple, dict, set

## list 列表
  - 可以存放任意类型数据的有序序列
  - 列表可以由零个或多个元素组成,元素之间用逗号分开,整个列表被方括号所包裹:
  - 创建
    - 使用[]或者list()创建列表
    - new_list = ["Stanley", "Loves", "Lily"]

  - 访问及修改
    - 使用列表名[索引]来访问和修改列表元素,索引初始值为0,最大值不超过列表长度 - 1
    - print(new_list[1]) # -> "Loves"
    - new_list[1] = "Adores"
    - print(new_list) # -> ['Stanley', 'Adores', 'Lily']
    - 若索引可以为负数,则是从列表末尾以-1为初始值开始计数

  - 使用[start, end, step]分片生成新的列表(新列表和旧列表位于不同内存地址)
    - [:]提取从开头到结尾的整个字符串
    - [start:]从start提取到结尾
    - [:end]从开头提取到 end - 1
    - [start:end]从start提取到end - 1
    - [start:end:step]从start提取到end - 1,每隔step个字符提取
    - start,end,step可以为负数,start和end为负数表示从右往左数,从-1开始计数,step为负数则表示倒序

  - 与列表有关的常用函数
    - len(a_list):返回列表长度
    - a_list.append(新元素):将新元素添加至列表末尾
    - a_list.extend(another_list):将another_list添加至a_list末尾,可以使用 += 达到相同效果, a_list += another_list
    - a_list.insert(index, 新元素):将新元素插入列表指定位置,若index的值大于列表长度,则将新元素插入列表末尾
    - del a_list[index]:删除指定位置的元素,index的值必须小于列表长度
    - del不是函数,而是Python语句,是赋值语句(=)的逆过程,它将变量和值之间的绑定解除
    - a_list.remove(元素):删除指定值的元素
      a_list = ['a', 'b', 'c']
      a_list.remove('b')
      print(a_list) # -> ['a', 'c']
    - a_list.pop(index):弹出指定位置的元素,index默认为-1
    - a_list.index(元素):如果列表中存在指定元素,则返回该元素的索引
    - 使用 in 判断某列表中是否存在某值,若存在,返回True,若不存在,返回False
    - a_list.count(元素):返回元素中某元素出现的次数
    - a_list.sort():列表排序,默认为升序,通过添加参数 reverse=True 可以改变为降序排列
    - a_list.copy():返回一个不同内存地址但列表值相同的新列表,浅拷贝,只能拷贝一层内容,对于嵌套列表的内存地址不做改变

  - 列表修改问题
    - 示例:
      a = [1, 2, 3] # -> 创建新列表
      b = a # -> 让b和a指向同一内存地址
      b[1] = "a" # -> 通过b修改列表中第二个元素
      print(a) # 输出[1, 'a', 3],由于指向同一内存,因此对b的修改同样会影响到a

  - 可以通过copy()函数、list()转换函数和[:]分片生成新的不同内存地址的列表,如此对新列表的修改就不会影响到旧列表的内容

## tuple 元组
  - 使用()或者tuple()创建元组
  - 元组可以看作不可更改的列表
  - 相对而言,元组比列表占用的空间少
  - 元组特性和列表基本相同,但不能使用更改元素内容的相关函数,例如append()、insert()等
  - 创建注意事项
    - 若元组内只有一个元素,在元素后需要有一个逗号表示这是一个元组
    - 也可以不用括号创建,但需要在元素后需要有一个逗号表示这是一个元组
      a = 1,
      print(type(a)) # -> <class 'tuple'>

## dict 字典
  - 一种组合数据,没有顺序,数据以键值对的形式出现
  - 创建: d = {} 或者 d = dict()
    d = {
      key1: value1,
      key2: value2,
      ...
      key_n: value_n
    }

  - 特性
    - 字典是序列类型,但是是无序序列,所以没有索引和切片
    - 字典中的所有数据都是键值对
    - key必须是可哈希的数值,比如int str, float, tuple等,但是list, set, dict等不行
    - value可以是任何值
    - 删除: del dic[key] # -> 删除整个键值对

  - 相关函数
    - d.keys():返回字典的键
    - d.values():返回字典的值
    - d.items():以列表的格式返回字典数据
      d = {
        "Name": "Stanley",
        "Age": 22
      }
      print(d.items()) # -> dict_items([('Name', 'Stanley'), ('Age', 22)])
    - d.clear():清空
    - d.get(key[, 默认值]):根据指定键,返回相应值,好处是可以设置默认值,若参数key在字典中不存在,则不会报错,而是返回传入的默认值
    - dict.fromkeys():使用指定的序列作为键,使用一个值作为字典的所有键的值
      a_list = [1, 2, 3, 4]
      d = dict.fromkeys(a_list, "LOVE")
      print(d)  # -> {1: 'LOVE', 2: 'LOVE', 3: 'LOVE', 4: 'LOVE'}

# set 集合
  - 集合是高中数学中的一个概念
  - 一堆确定的无序的唯一的数据
  - 同样可以使用大括号定义,但大括号内必须有值

  - 特征:
    - 集合内数据无序,即无法使用索引和切片
    - 集合内部数据具有唯一性,可以用来排除重复数据
    - 集合内的数据,str, int, float, tuple等可哈希的数据
    - 集合本身不可哈希

  - 函数:
    - s.add():向集合中添加元素
    - s.clear():清空集合(原集合操作)
    - s.copy():浅拷贝
    - s.remove(值):移除指定值,若集合中没有该值会报错
    - s.discard(值):移除指定值,若集合中没有该值不会报错
    - s.pop():随机弹出集合中的一个值,没有参数
    - s1.intersection(s2):交集
    - s1.difference(s2):差集
    - s1.union(s2):并集
    - s1.issubset(s2):检查集合s1是否是集合s2的子集
    - s1.issuperset(s2):检查集合s1是否是集合s2的超集

  - 集合的数学操作
    s1 = {1, 2, 3}
    s2 = {2, 3, 4, 5}
    s3 = s2 - s1
    print(s3) # -> {4, 5}

  - frozen set 冰冻集合
    - 冰冻集合就是不可以进行任何修改的集合
    - 创建:s = frozenset()
    - 这是一种特殊的集合,具备除了修改外集合的所有特性

## list, dict, set 都可以使用推导式生成
  - 列表推导式格式:[ expression for item in iterable if condition],if过滤条件可以省略,该格式同样适用于set,但中括号需要改为{}
    a_list = [n for n in range(1, 10) if n % 2 == 0]
    print(a_list) $ -> [2, 4, 6, 8]
  - 字典推导式格式:{ key_expression : value_expression for expression in iterable }
    a_list = [n for n in range(1, 5)]
    b_list = ["a", "b", "c", "d"]
    c_dict = {k: b_list[k - 1] for k in a_list}
    print(c_dict) # -> {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
  - tiple是没有推导式的,虽然也可以使用[ expression for item in iterable if condition],但实际上这已经成为了一个生成器
    a_tuple = (n for n in range(1, 10))
    print(a_tuple) # -> <generator object <genexpr> at 0x7f5ee58dd360>

本文参考书籍:[美]Bill Lubanovic 《Python语言及其应用》

Python容器--list, tuple, dict, set的更多相关文章

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

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

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

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

  3. python list 和 tuple, dict 用于迭代代价

    #!/usr/bin/env python #-*- coding:utf-8 -*- import time start = time.time() for i in range(1000000): ...

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

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

  5. python 之 list,tuple,dict,set

    基本类型,  其中set好像提到的很少 list : []  根据字面, 是一个列表,  所以有序, 可以通过序号方位 tuple: ()  是不变的list, 通过序号访问 dict: {},  字 ...

  6. python中list,tuple,dict,set等深浅拷贝的问题记录

    对于字典.元祖.列表 而言,进行赋值.浅拷贝和深拷贝时,其内存地址的变化是不同的. 1.赋值 赋值,只是创建一个变量,该变量指向原来内存地址,如: 1 2 3 n1 = {"k1" ...

  7. list,tuple,dict,set常用方法

    Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...

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

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

  9. python学习中,list/tuple/dict格式化遇到的问题

    昨天上了python培训的第一课,学习了基础知识.包括类型和赋值,函数type(),dir(),id(),help()的使用,list/tuple/dict的定义以及内置函数的操作,函数的定义,控制语 ...

随机推荐

  1. intellijidea课程 intellijidea神器使用技巧1-4 idea安装

    idea安装 run intellij idea==>finish ==>do not import settings==>ok==>evaluate for free==&g ...

  2. CDSN博客第一天

    CDSN博客第一天 今天是CSDN写博客的第一天. 2017/2/11 13:05:45

  3. shell脚本学习(2)比较两个数字大小

    注意:shell中对比字符串只能使用==.<.>.!=.-z.-n.对比字符串时,末尾一定要加上x(或者a.b等)一个字符,因为if [ $1x == "ab"x ]时 ...

  4. Open Data for Deep Learning

    Open Data for Deep Learning Here you’ll find an organized list of interesting, high-quality datasets ...

  5. 详解如何利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入

    我们先来简单了解一下WinForm和FarPoint,WinForm是·Net开发平台中对Windows Form的一种称谓.而FarPoint是一款模拟EXCEL的控件.它可以根据用户的要求实现很大 ...

  6. vs下如何调试Dll

    1.首先需要一个exe加载你的dll 2.dll项目的属性设置 3.将dll设为启动项 4.在dll中设置断点 F5就可以调试了

  7. OpenGL学习 Our First OpenGL Program

    This shows you how to create the main window with the book’s application framework and how to render ...

  8. Selenium入门11 滚动条控制(通过js)

    这一节要有js基础.做web端的UI自动化必须要有html,css,javascript前端基础. 滚动条控制: 1 移动垂直滚动条 document.documentElement.scrollTo ...

  9. 初识QT中的qDebug()

    首先在头文件中包含 #include<QDebug> 当开发者需要为一个装置.文件.字符串或者控制台,写出调试和跟踪信息时,该类被使用. 在需要使用的地方插入: qDebug(][]); ...

  10. css3之Media Queries 媒体查询

    一.初步了解 Media Queries是CSS3新增加的一个模块功能,其最大的特点就是通过css3来查询媒体,然后调用对应的样式. 了解Media Queries之前需要了解媒体类型以及媒体特性: ...