zoukankan      html  css  js  c++  java
  • 第二章—数据类型(元组、字典、集合)

    元组:元组是由一对括号和以逗号分隔的值组成。

    存储一组数据,没有一旦创建,不能修改又称只读列表。

    特性:

    1.不可变

    2.元组本身不可变,如果元组内还有其他可变的元素,这些可变元素是可以改变的。

    创建:

    >>> tup = ()
    >>> tup
    ()
    当元组只有一个元素时,需要在元素后面加‘ , '。否则会被默认时变量赋值
    
    >>> tup = ('a')
    >>> tup
    'a'
    
    >>> tup = ('a',)
    >>> tup
    ('a',)

    索引和切片

    >>> tup = (1,2,3,'a','b','c')
    >>> tup.index("a")
    3
    >>> tup[1:4]
    (2, 3, 'a')

    计数

    >>> tup = (1,2,3,'a','b','c')
    >>> tup.count('a')
    1

    元组的循环:

    >>> for i in tup:
        print(i)    
    1
    2
    3
    a
    b
    c
    
    
    
    >>> for index,i in enumerate(tup):
        print(index,i)    
    0 1
    1 2
    2 3
    3 a
    4 b
    5 c

    字典dict:可变的数据类型

           字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组、布尔值。

      字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    特性:

    1.key-value结构,存储大量关系型数据。

    2.key必须唯一,必须可哈希,也就是不可变类型

    3.可存放任意多个值,value可以不唯一,可以修改

    4.字典是无序的

    5.查找速度特别快

     创建

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1
    {'name': 'james', 'age': 18, 'sex': 'male'}

    增加

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1['high'] = 175  # 不存在key = 'high'才新增,如果存在就是覆盖
    >>> dic1
    {'name': 'james', 'age': 18, 'sex': 'male', 'high': 175}

    dic1.setdefalut(key,value)  # 字典中存在key,不做任何改变,不存在就新增,value不指定时默认为None

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.setdefault("name",'JAMES')  # 字典中存在key为'name'的键值对,直接返回key对应的值,字典没有改变
    'james'
    >>> dic1
    {'name': 'james', 'age': 18, 'sex': 'male'}

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.setdefault('weight',130)  # 字典中不存在key = 'weight',就新增进去,返回value
    130
    >>> dic1
    {'name': 'james', 'age': 18, 'sex': 'male', 'weight': 130}

    
    

    删除

    dic1.pop(key,x)
    指定key值删除,如果key存在,返回key对应的value,x缺失的情况下,key不存在会报错。指定x,key不存在返回x,不会报错。
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'} >>> dic1.pop('age') # 不指定x,key存在返回key的value 18 >>> dic1 {'name': 'james', 'sex': 'male'}

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.pop("high")  # 不指定x,key不存在报错

    Traceback (most recent call last):
    File "<pyshell#24>", line 1, in <module>
    dic1.pop("high")
    KeyError: 'high'

    如果指定了x,key不存在时,直接返回x;如果指定x,key存在就直接返回key对应的value(可设置返回值x)

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.pop("high",178)
    178

    dic1.popitem()  # 随机删除,有返回值,返回以元组形式的键值。

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.popitem()
    ('sex', 'male')

    del dic1.[key]  # 按照指定的key删除键值,没有返回值,如果key不存在会报错

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> del dic1.['heigh']
    SyntaxError: invalid syntax

    del dic1  # 直接删除字典

    dic1.clear()  #清空列表

     修改

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1['name'] = 'JAMES'  # 直接对指定的key值对应的value进行赋值修改
    >>> dic1
    {'name': 'JAMES', 'age': 18, 'sex': 'male'}


    dic1.update(dic2) # 更新
    把dic2的键值对更新到dic1中,相同key值的,覆盖掉dic1中的value,dic1中的没有的key,新增进去
    dic1法生改变,dic2不发生改变

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic2 = {'name':'tony','heigh':178}
    >>> dic1.update(dic2)
    >>> dic1
    {'name': 'tony', 'age': 18, 'sex': 'male', 'heigh': 178}
    >>> dic2
    {'name': 'tony', 'heigh': 178}

    查询

    dic1[key] 按照指定的key,找出对应的value,如果key不存在,会报错

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1['name']
    'james'

    dic1.get(key,x) 查找对应键的值,可设置返回值,x默认是None

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.get('name')  # 如果存在返回对应的value
    'james'

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.get('heigh','不存在')  # 如果key不存在,返回x指定的值,x为空默认返回None
    '不存在'


    dic1.keys() 返回字典里面的全部key,以列表的形式返回
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'} >>> dic1.keys() dict_keys(['name', 'age', 'sex'])

    dic1.values()  返回字典里面的全部value,以列表的形式返回
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.values()
    dict_values(['james', 18, 'male'])
    
    dic1.items()  把字典的键和值放进元组,以列表的形式返回
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> dic1.items()
    dict_items([('name', 'james'), ('age', 18), ('sex', 'male')])

     循环

    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> for i in dic1:  # 打印的是key
        print(i)    
    name
    age
    sex
    
    
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> for i in dic1.keys():  # 打印的是key
        print(i)    
    name
    age
    sex
    
    
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> for i in dic1.values():  # 打印的是values
        print(i)    
    james
    18
    male
    
    
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> for k,v in dic1.items():  # 打印的是key 和 value (这个方法低效,是先把字典转成列表再循环打印)
        print(k,v)    
    name james
    age 18
    sex male
    
    
    >>> dic1 = {'name':'james', 'age':18, 'sex':'male'}
    >>> for i in dic1:
        print(i,dic1[i])    # 直接用dic1[i]取出value值
    name james
    age 18
    sex male

    字典的其他方法

    fromkeys

    dict.fromkeys(seq[, value])  # 以seq为字典的key,value为键对应的值创建字典
    seq可以是元组或者列表
    value也可以是元组或者列表

    >>> {}.fromkeys((1,2,3),(10,1))
    {1: (10, 1), 2: (10, 1), 3: (10, 1)}
    >>> {}.fromkeys((1,2,3),[10,1])
    {1: [10, 1], 2: [10, 1], 3: [10, 1]}

    >>> {}.fromkeys([1,2,3],10)
    {1: 10, 2: 10, 3: 10}

    >>> {}.fromkeys([1,2,3],[10,1])
    {1: [10, 1], 2: [10, 1], 3: [10, 1]}

     集合:可变的数据类型(空集合set())

    特性:

    1.去重,互异性,元素不重复

    2.元素必须是不可变类型,可hash(数字、字符串、元组)

    3.无序

    创建

    >>> set1 = set((123,))  # set()括号里可以是元组、列表、字符串
    >>> set1
    {123}

    >>> set1 = set('a',)
    >>> set1
    {'a'}

    >>> set1 = set('a',)
    >>> set1
    {'a'}

    
    

    >>> set1 = set((123))      #### 当集合里面只有一个元素的时候需要加逗号创建,否则报错
    Traceback (most recent call last):
    File "<pyshell#0>", line 1, in <module>
    set1 = set((123))
    TypeError: 'int' object is not iterable

    >>> set1 = {1,2,3,4}
    >>> set1
    {1, 2, 3, 4}

    增加

    set1.add(元素)  # 把元素加入集合

    >>> set1.add('b')
    >>> set1
    {'a', 'b'}

    set1.update(元素)把元素加到集合中,可以多个值,迭代添加

    >>> set1 = {1,2,3,4}
    >>> set1.update("cd")
    >>> set1
    {1, 2, 3,'d', 4, 'c'}

    删除

    set1.pop()随机删除,返回的是删除的值,集合为空的时候会报错
    >>> set1 = {1,2,3,4} >>> set1.pop() 1

    set1.discard(元素)没有返回值,没有指定的元素不会报错

    >>> set1 = {1,2,3,4}
    >>> set1.discard(1)
    >>> set1
    {2, 3, 4}

    >>> set1 = {1,2,3,4}  # 没有指定元素时不会报错
    >>> set1.discard(100)

    >>> set1 = {1,2,3,4}

    >>> set1.remove(1)  # 也可以用remove删除,没有元素会报错

    >>> set1
    {2, 3, 4}

    循环集合,只能通过循环查找集合的元素

    >>> for i in set1:
        print(i)    
    1
    2
    3
    4

    求交集(&  或者 intersection)

    >>> set1 = {1,2,3,4}
    >>> set2 = {3,4,5,6}
    >>> set1.intersection(set2)
    {3, 4}
    
    >>> set1 & set2
    {3, 4}

    求并集(| 或者 union)

    >>> set1 = {1,2,3,4}
    >>> set2 = {3,4,5,6}
    >>> set1.union(set2)
    {1, 2, 3, 4, 5, 6}
    
    
    >>> set1 | set2
    {1, 2, 3, 4, 5, 6}

    求差集 (- 或者 difference)

    >>> set1 = {1,2,3,4}
    >>> set2 = {3,4,5,6}
    >>> set1 - set2    #  set1独有的
    {1, 2}
    >>> set2 - set1      #  set2独有的
    {5, 6}
    
    >>> set1 = {1,2,3,4}
    >>> set2 = {3,4,5,6}
    >>> set1.difference(set2)  # 返回的时set1中出去两个集合相同的元素
    {1, 2}
    >>> set2.difference(set1)  # 返回的时set2中出去两个集合相同的元素
    {5, 6}

    对称差集  除去两个集合相同的元素(^ 或者 symmetric_difference)

    >>> set1 = {1,2,3,4}
    >>> set2 = {3,4,5,6}
    >>> set1 ^ set2
    {1, 2, 5, 6}
    >>> set1.symmetric_difference(set2)
    {1, 2, 5, 6}

    判断一个集合是否是另一个集合的子集,子集与超集

    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
    
    print(set1 < set2)
    print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
    
    print(set2 > set1)
    print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。

    集合的其他方法:把集合变成不可变的数据类型

    >>> set1=frozenset(set1)  # 变成不可变数据类型不能删除
    >>> set1
    frozenset({2, 3, 4})
    >>> set1.pop()
    Traceback (most recent call last):
      File "<pyshell#65>", line 1, in <module>
        set1.pop()
    AttributeError: 'frozenset' object has no attribute 'pop'
    
    >>> for i in set1:   # 变成不可变数据类型,可以遍历循环
        print(i)    
    2
    3
    4
  • 相关阅读:
    Spring RestController @RequestParam 中的 required=false 参数
    unity中动画状态机(Animator)介绍
    unity音效
    unity2019中播放动画循环
    unity2019自定义天空盒
    unity脚本物体移动,旋转,属性可见性
    选择排序
    es 深度分页查询
    windows关闭防火墙和病毒程序软件步骤
    信息整理
  • 原文地址:https://www.cnblogs.com/james201133002/p/9081164.html
Copyright © 2011-2022 走看看