zoukankan      html  css  js  c++  java
  • list tuple dict set

     

    List(列表)

    列表可以进行截取、组合。

    列表的数据项不需要具有相同的类型。

    1、操作列表

    创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

    list1 = ['physics', 'chemistry', 1997, 2000]
    list2 = [1, 2, 3, 4, 5 ]
    list3 = ["a", "b", "c", "d"]

    (1)增

    ① 使用 append() 方法

    list = [1,"alex"]          ## 空列表
    list.append('Google')   ## 使用 append() 添加元素
    list.append('Runoob')
    print(list)

    以上实例输出结果:
    [1,"alex",'Google', 'Runoob']

    ② 使用 insert() 方法

    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    li.insert(4,'chunge')    #在下标位4的位置插入
    print(li)
    
    以上实例输出结果:
    ['alex', [1, 2, 3], 'wusir', 'egon', 'chunge', '女神', 'taibai']

    ③ 使用 extend() 方法:在最后位置,分解插入

    错误示例:
    li = ['alex',[1,2,3],'wusir','egon','女神','taibai'] li.extend(123) print(li) 输出结果: li.extend(123) #int不可迭代 TypeError: 'int' object is not iterable
    正确示例:
    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    li.extend('dage') 
    print(li)
    
    输出结果:
    ['alex', [1, 2, 3], 'wusir', 'egon', '女神', 'taibai', 'd', 'a', 'g', 'e']

    (2)删

    ① pop():按索引删除【默认删除最后一个】,有返回值:返回删除的值。

    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    print
    ("原始列表:",li) print("pop掉的数据:",li.pop(1)) print("pop后的列表:",li) 运行结果: 原始列表: ['alex', [1, 2, 3], 'wusir', 'egon', '女神', 'taibai'] pop掉的数据: [1, 2, 3] pop后的列表: ['alex', 'wusir', 'egon', '女神', 'taibai']

    ② remove():按元素删除,无返回值

    
    
    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    print("原始列表:",li)
    li.remove('taibai')  
    print("remove后的列表:",li)
    
    运行结果: 
    原始列表: [
    'alex', [1, 2, 3], 'wusir', 'egon', '女神', 'taibai']
    remove后的列表: [
    'alex', [1, 2, 3], 'wusir', 'egon', '女神']

    ③ clear():清空

    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    print("原始列表:",li)
    li.clear()  
    print("clear后的列表:",li)
    
    运行结果:
    原始列表: ['alex', [1, 2, 3], 'wusir', 'egon', '女神', 'taibai']
    clear后的列表: []

    ④ del:删除列表

    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    print("原始列表:",li)
    del li   
    print("del后的列表:",li)
    
    运行结果:
    原始列表: ['alex', [1, 2, 3], 'wusir', 'egon', '女神', 'taibai']
    NameError: name 'li' is not defined
    # 切片删除
    
    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    print("原始列表:",li)
    del li[2:] 
    print("del切片删除后的列表:",li)
    
    运行结果:
    原始列表: ['alex', [1, 2, 3], 'wusir', 'egon', '女神', 'taibai']
    del切片删除后的列表: ['alex', [1, 2, 3]]

    (3)改:

    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    print("原始列表:",li)
    li[0:3] = [1,2,34,'春哥']
    print("修改后的:",li)
    
    运行结果:
    原始列表: ['alex', [1, 2, 3], 'wusir', 'egon', '女神', 'taibai']
    修改后的: [1, 2, 34, '春哥', 'egon', '女神', 'taibai']

    (4)查

    # 切片查找
    list1 = ['physics', 'chemistry', 1997, 2000]
    list2 = [1, 2, 3, 4, 5, 6, 7]
    
    print("list1[0]: ", list1[0])
    print("list2[1:5]: ", list2[1:5])   #顾头不顾尾
    
    运行结果:
    list1[0]:  physics
    list2[1:5]:  [2, 3, 4, 5]
    # 遍历
    li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
    for i in li:
        print(i,end=' -- ')
    
    运行结果:
    alex -- [1, 2, 3] -- wusir -- egon -- 女神 -- taibai -- 

    2、列表排序

    li = [1,5,4,8,0,2,3]
    print("原始列表:",li)
    #正序排序【最快】
    li.sort()
    print("正序排序: ",li)
    
    # 倒序排序
    li.sort(reverse = True)
    print("倒序排序: ",li)
    
    # 反转
    li.reverse()
    print("对列表进行反转",li)
    
    运行结果:
    原始列表: [1, 5, 4, 8, 0, 2, 3]
    正序排序:  [0, 1, 2, 3, 4, 5, 8]
    倒序排序:  [8, 5, 4, 3, 2, 1, 0]
    对列表进行反转 [0, 1, 2, 3, 4, 5, 8]

    3、列表嵌套

    def each_list(list_name):
        for yuansu in list_name:
            if isinstance(yuansu,list):
                each_list(yuansu)        # 嵌套
            else:
                print(yuansu)
    
    li = [1,2,3,5,'alex',[2,3,4,'taibai'],'afds']
    each_list(li)
    
    运行结果:
    1
    2
    3
    5
    alex
    2
    3
    4
    taibai
    afds

    4、列表函数 & 方法

    Python包含以下函数:

    li = ['taibai','武藤兰','sunxiansen','女神',['alex',2,3]]
    print("原始列表:",li)
    print("取第二个元素的第二个字符:",li[1][1])
    print()
    
    name = li[0].capitalize()   #只是找到,然后做了一些操作,就是“看戏”
    print("使第一个元素的首字母大写:",name)
    print("做了capitalize操作后li并没有发生改变:",li)
    li[0] = name               # 真正修改了列表的值,开始“唱戏”
    print("做了capitalize操作后,发生改变的li:",li)
    print()
    
    li[2] = li[2].replace('sen','')      # replace(old, new)
    print("做了replace操作后,发生改变的li:",li)
    
    运行结果:
    原始列表: ['taibai', '武藤兰', 'sunxiansen', '女神', ['alex', 2, 3]]
    取第二个元素的第二个字符: 藤
    
    使第一个元素的首字母大写: Taibai
    做了capitalize操作后li并没有发生改变: ['taibai', '武藤兰', 'sunxiansen', '女神', ['alex', 2, 3]]
    做了capitalize操作后,发生改变的li: ['Taibai', '武藤兰', 'sunxiansen', '女神', ['alex', 2, 3]]
    
    做了replace操作后,发生改变的li: ['Taibai', '武藤兰', 'sunxian生', '女神', ['alex', 2, 3]]

    ====================================================================================================================================================================

     

    Tuple(元组)

    另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

    不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

    # 只读列表:可循环查询,可切片,可连接
    # 儿子不能改,孙子可能可以改

    1、tuple的陷阱

    (1)当定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来:

    >>> t = (1, 2)
    >>> t
    (1, 2)

    (2)如果要定义一个空的tuple,可以写成:

    >>> t = ()
    >>> t
    ()

    (3)如果要定义一个只有1个元素的tuple,必须这样写:

    # 错误示例
    >>> t = (1)
    >>> t
    1
    #定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
    # 正确示例
    # 只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
    >>> t = (1,)
    >>> t
    (1,)

    2、“可变的” tuple

    # 儿子不能改,孙子可能可以改
    
    >>> t = ('a', 'b', ['A', 'B'])
    >>> t[2][0] = 'X'
    >>> t[2][1] = 'Y'
    >>> t
    ('a', 'b', ['X', 'Y'])

      当我们把list的元素'A''B'修改为'X''Y'后,tuple变为:

     

      表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

    3、访问tuple

    tup1 = ('physics', 'chemistry', 1997, 2000)
    tup2 = (1, 2, 3, 4, 5, 6, 7 )
     
    print("tup1[0]: ", tup1[0])
    print("tup2[1:5]: ", tup2[1:5])
    
    运行结果:
    tup1[0]:  physics
    tup2[1:5]:  (2, 3, 4, 5)

    4、连接(“修改”)tuple

    tup1 = (12, 34.56)
    tup2 = ('abc', 'xyz')
     
    # 以下修改元组元素操作是非法的。
    # tup1[0] = 100
     
    # 创建一个新的元组
    tup3 = tup1 + tup2
    print(tup3)
    
    运行结果:
    (12, 34.56, 'abc', 'xyz')

    5、删除 tuple

    元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组,如下实例:

    tup = ('physics', 'chemistry', 1997, 2000)
     
    print(tup)
    del tup
    print("After deleting tup : ")
    print(tup)

    运行结果:(输出变量会有异常信息)
    ('physics', 'chemistry', 1997, 2000)
    After deleting tup :
    Traceback (most recent call last):
      File "test.py", line 9, in <module>
        print tup
    NameError: name 'tup' is not defined

    6、tuple 运算符

    7、tuple 内置函数

    8、range() 函数

    for i in range(3,10,2):
        print(i)
    print('+++++++')
    for j in range(10,0,-2):
        print(j)
    print('='*8)
    for k in range(0,10,-1):   #不会报错,没有运行结果
        print(k)
    
    运行结果:
    3
    5
    7
    9
    +++++++
    10
    8
    6
    4
    2
    ========

    ====================================================================================================================================================================

     

    Dict(字典)

    字典是另一种可变容器模型,且可存储任意类型对象,是无序的。

    字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {}

    # 和list比较,dict有以下几个特点:
    # 查找和插入的速度极快,不会随着key的增加而变慢(二分查找);
    # 需要占用大量的内存,内存浪费多。
    
    # list相反:
    # 查找和插入的时间随着元素的增加而增加;
    # 占用空间小,浪费内存很少。
    
    #所以,dict是用空间来换取时间的一种方法。
    # 需要知道:
    # 不可变数据类型(可哈希):元组,bool,int,str ——  key
    # 可变数据类型(不可哈希):list,dict   ——  value

    1、访问字典里的值

    dic = {
        'name':['大梦','xiaomeng'],
        'py9':[{'人数':71,'age':18}],
        (1,2,3):'ergge'
    }
    print(dic["name"])
    print(dic[(1,2,3)])
    
    运行结果:
    ['大梦', 'xiaomeng']
    ergge
    dic1 = {'age':18,'name':'xiaohong','sex':''}
    print(dic1)
    print(dic1.keys(),type(dic1.keys()))
    print(dic1.values(),type(dic1.values()))
    print(dic1.items())          # 里边是元组,元组里边是“键,值”
    
    运行结果:
    {'age': 18, 'name': 'xiaohong', 'sex': ''}
    dict_keys(['age', 'name', 'sex']) <class 'dict_keys'>
    dict_values([18, 'xiaohong', '']) <class 'dict_values'>
    dict_items([('age', 18), ('name', 'xiaohong'), ('sex', '')])

    如果用字典里没有的键访问数据,会输出错误如下:

    dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
     
    print "dict['Alice']: ", dict['Alice']
    
    运行结果:
    dict['Alice']: 
    Traceback (most recent call last):
      File "test.py", line 5, in <module>
        print "dict['Alice']: ", dict['Alice']
    KeyError: 'Alice'
    # 要避免key不存在的错误,有两种办法
    
    # 一是通过in判断key是否存在:
    >>> 'Thomas' in dic
    False
    
    # 二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value【首选】:
    # 注意:返回None的时候Python的交互环境不显示结果。
    >>> dic.get('Thomas')
    >>> dic.get('Thomas', -1)
    -1

    2、修改字典里的值

    向字典添加新内容的方法是:增加新的键/值对,修改或删除已有键/值对

    dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    dict['Age'] = 8 # 更新
    dict['School'] = "RUNOOB" # 添加
     
    print("dict['Age']: ", dict['Age'])
    print("dict['School']: ", dict['School'])
    
    运行结果:
    dict['Age']:  8
    dict['School']:  RUNOOB

    3、删除字典元素

    要删除一个key,用pop(key)方法,对应的value也会从dict中删除

    # pop(key)方法

    dic1 = {'age':18,'name':'xiaohong','sex':''} dic1.pop('sex') print(dic1.pop('sex','无此键')) #可设置返回值 print(dic1) 运行结果: 无此键 {'age': 18, 'name': 'xiaohong'}
    # popitem()方法:随机删除
    
    dic1 = {'age':18,'name':'xiaohong','sex':''}
    dic1.popitem()   # 有返回值,元组里面删除的是键值
    print(dic1)
    
    运行结果:
    {'age': 18, 'name': 'xiaohong'}
    # del 方法
    
    del dic1['name']
    print(dic1)
    print()
    del dic1
    print(dic1)
    
    运行结果:
    {'age': 18, 'sex': ''}
    
    Traceback (most recent call last):
      File "F:/Python/Project/All_Stacks/01 基础/day5/dict.py", line 42, in <module>
        print(dic1)
    NameError: name 'dic1' is not defined
    # clear() 方法
    
    dic1.clear()
    print(dic1)
    
    运行结果:
    {}

    ===========================================================================================================================================

     

    Set(集合)

    set和dict类似,也是一组key的集合,但不存储value,{ }。

    由于key不能重复,所以,在set中,没有重复的key,且没有顺序。

    >>> s = set([1, 1, 2, 2, 3, 3])
    >>> s
    {1, 2, 3}

    1、set基础操作

    (1)增

    set1 = {'alex','wusir','ritan','egon'}
    set1.add('alex')    #不重复
    set1.add('nvshen')  #无序
    print(set1)
    
    运行结果:
    {'alex', 'egon', 'ritan', 'wusir', 'nvshen'}

    (2)删

    # pop()
    
    set1 = {'alex','wusir','ritan','egon'}
    print("pop前的集合:",set1)
    set1.pop()                        #随机删除,返回删除的元素
    print("pop后的集合:",set1)
    
    运行结果:
    pop前的集合: {'alex', 'egon', 'wusir', 'ritan'}
    pop后的集合: {'egon', 'wusir', 'ritan'}
    # remove()
    
    print("remove前的集合:",set1)
    set1.remove('alex')        #按元素删除,要删除的元素没有的话 报错
    print("remove后的集合:",set1)
    
    运行结果:
    remove前的集合: {'wusir', 'alex', 'ritan', 'egon'}
    remove后的集合: {'wusir', 'ritan', 'egon'}
    # del
    
    del set1
    print(set1)
    
    运行结果:
    NameError: name 'set1' is not defined

    (3)改

    # 集合的"改"不存在,原因如下:①无序的 ②虽然集合是可变类型,但是集合中的元素(key)是不可变类型

    (4)查

    set1 = {'alex','wusir','ritan','egon'}
    for i in set1:
        print(i)
    
    运行结果:
    wusir
    ritan
    alex
    egon

    2、做数学意义上的交集、并集等操作# set1 = {1,2,3}

    # set2 = {1,2,3,4,5}
    #--------------------(1)交集
    # print(set1 & set2)
    # print(set1.intersection(set2))
    
    #--------------------(2)并集
    # print(set1 | set2)
    # print(set1.union(set2))
    
    #--------------------(3)差集  【set1 - set2:set1独有的】
    # print(set1 - set2)
    # print(set1.difference(set2))
    
    #--------------------(4)反交集
    # print(set1 ^ set2)
    # print(set1.symmetric_difference(set2))
    
    #--------------------(5)子集与超集
    # print(set1 < set2)
    # print(set1.issubset(set2))   #这两个相同,说明set1是set2的子集
    
    # print(set2 > set1)
    # print(set2.issuperset(set1))  #这两个相同,说明set1是set2的超集
    
    #--------------------(6)frozenset:变成不可变的数据类型
    s1 = {1,2,3}
    print(s1,type(s1))
    s = frozenset('barry') #只能”查“,不能”增 删 改“
    print(s,type(s))
    for i in s:
    print(i)

    运行结果:

    {1, 2, 3} <class 'set'>
    frozenset({'r', 'b', 'a', 'y'}) <class 'frozenset'>
    r
    b
    a
    y

    3、功能:去重

    li = [1,2,3,5,6,33,5,6,2,1,33,4]
    set1 = set(li)
    print(set1)
    
    运行结果:
    {1, 2, 3, 33, 5, 6, 4}

    补充:

    1、slice()函数

    • start -- 起始位置
    • stop -- 结束位置
    • step -- 间距

    slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。

    >>>myslice = slice(5)    # 设置截取5个元素的切片
    >>> myslice
    slice(None, 5, None)
    >>> arr = range(10)
    >>> arr
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> arr[myslice]         # 截取 5 个元素
    [0, 1, 2, 3, 4]

    2、[ ] () {} set() 转换成bool值全是Null

  • 相关阅读:
    Git:常用命令记录
    JS笔记(二):隐式转换
    vertical-align/line-height:水平垂直居中
    JS笔记(一):声明提升
    Array.prototype.sort():从一道面试题说起
    CSS笔记(一):选择器规范
    FreeCodeCamp:Profile Lookup
    tile_images_offset的简单使用
    vs2013快捷键等(转)
    Qt状态栏的使用(转)
  • 原文地址:https://www.cnblogs.com/timetellu/p/10675224.html
Copyright © 2011-2022 走看看