zoukankan      html  css  js  c++  java
  • Python 集合(Set)、字典(Dictionary)

    集合(Set)

    集合是无序的,无序也就没有索引,不能进行索引相关的操作。无序,python解释器就不能通过索引(位置)区分集合中的相同元素,所以集合中不能有相同的元素。

    集合用大括号{  }表示。

    集合中元素的数据类型可以不同,但集合中不能嵌套列表、元组、集合、字典。

    a={1,1,3}
    print(a)  #{1,3}  会自动去掉重复的元素
    
    a={1,"ok"}   #数据类型可以不同
    print(a)   #{1, 'ok'}
    
    a={1,"ok",[1,2]}   #报错  集合中元素的数据类型可以不同,但集合中不能嵌套列表、元组、集合、字典。
    print(a)

    集合可以使用in、not  in进行成员判断。

    集合之间可以进行集合运算

    a={1,2,3}
    b={1,2,6}
    
    print(a|b)  #求并集  {1, 2, 3, 6}
    print(a&b)  #求交集   {1, 2} 
    print(a-b)  #求差集(a中有,b中没有)  {3}
    print(a^b)  #并集减去交集,即把a、b独有的元素组成一个集合   {3, 6}

    |   是python的逻辑或,a或b,即并集

    &  是python的逻辑与,a且b,a、b中都要有,即交集

    python的逻辑运算符

    • and、&    与
    • or、|    或
    • not   非(python中,逻辑非不能用!表示)

    字典(Dictionary)

    字典是无序的。

    字典中一个键值对就是一个元素。因为是用key来标识元素,所以同一个字典中,key不能相同(不会报错,但后面的值会覆盖前面的值)。

    字典中的key、value的数据类型可以不同,但key必须是不可变的数据类型,比如数字、字符串、元组。

    字典用大括号{  }表示。

    a={"name":"张三","age":18}  #key、value之间冒号分隔,键值对之间逗号分隔
    
    a={1:"张三","age":18,"score":(100,90,99)}  #字典中的key可以是不同的类型,但key必须是不可变的数据类型。value可以是任何类型。
    
    a={"name":"张三","name":"李四"}  #key不能相同,相同时,后面的值会覆盖前面的值
    print(a)   #{'name': '李四'}

    可通过key来操作字典中的元素

    a={"name":"张三","age":12,}
    
    print(a["name"])   #张三   如果key是数字、元组,以  字典变量名[数字|元组]  的方式操作,key不加引号,加引号表示key是字符串。
    
    a["age"]=10   #如果key已存在,这是修改对应的值
    a["score"]={"Chinese":90,"math":100}   #如果key不存在,这是往字典中添加一个键值对
    print(a)  #{'name': '张三', 'age': 10, 'score': {'Chinese': 90, 'math': 100}}
    
    del a["score"]  #删除一个键值对
    print(a)   #{'name': '张三', 'age': 10}
    
    a.clear()  #清空字典,会删除所有的键值对,只保留一个空字典
    print(a)   #{}
    
    del a   #删除a这个变量
    print(a)   #报错

     字典通过key来标识、区分元素,不需要索引,所以字典是无序的。

    字典的常用函数

    函数 描述

    dict.keys()

    获取所有的key
    dict.values() 获取所有的value
    dict.items() 获取所有的键值对
       
    dict1.update(dict2)   把dict2中的键值对全部添加到dict1中,dict1会改变,dict2不变。此函数返回值是void。
    dict.copy()

    复制,返回dict的一个副本。

    dict.clear() 清空字典,删除所有键值对,只保留一个空字典
       
    dict.has_key(key) 检测字典中是否有指定的key,返回bool值
    dict.get(key,default)  获取key对应的value,若key不存在,返回指定的默认值
    dict.setdefault(key[,default])     和get(key,default)一样,只不过key不存在时,会先往字典中添加这个键值对,然后返回值
       
    dict.pop(key[,default])  删除key对应的键值对,并返回这个键值对中的value。若key不存在,返回设置的default的值。
    dict.popitem()  删除字典中的最后一个键值对,并返回这个键值对中的value。虽然字典是无序的,但这个函数删除的确实是最后添加的一个键值对。
       
    dict.fromkeys(seq[,value])        

    创建并返回一个新字典。seq是序列,使用序列中的元素作为key,value可选,为所有键值对设置默认value。

    这个函数比较特殊,前面的dict都是字典类的实例,调用的是实例方法。

    在python中,dict是一个类,表示字典。fromkeys()是dict类的静态方法,直接通过类名调用。

     字典是可变的,如果以上操作修改了字典,字典本身会改变。

     copy()使用示例:

    dict1={"name":"张三","age":18,"score":(100, 90, 99)}
    dict2=dict1.copy()
    print(dict2)  #{'name': '张三', 'age': 18, 'score': (100, 90, 99)}

    setdefault()使用示例:

    dict={"name":"张三"}
    print(dict.setdefault("age",18))   #18
    print(dict)   #{'name': '张三', 'age': 18}

     

    dict.fromkeys(seq[,value])使用示例:

    a=[1,2,3]   #列表
    b=(1,2,3)  #元组
    c="ok"  #字符串
    
    #参数必须是序列
    
    
    
    print(dict.fromkeys(a))  #{1: None, 2: None, 3: None}
    print(dict.fromkeys(b))  #{1: None, 2: None, 3: None}
    print(dict.fromkeys(c))  #{'o': None, 'k': None}
    
    #以序列中的元素作为key,字符串的元素是单个字符。
    #为设置值时,默认值是None
    
    
    
    print(dict.fromkeys(a,"ok"))  #{1: 'ok', 2: 'ok', 3: 'ok'}
    
    #设置的值是所有key的值。
    #设置的值可以是任何类型

    小结

    1、python中,序列(字符串、列表、元组)是有序的,集合、字典都是无序的。

    有序的就有索引,可进行索引相关的操作,可用索引来标识、区分元素,所以元素可重复。

    集合中不能有重复的元素,字典中不能有重复的key。

    2、数字、字符串、元组是不可变的,对它们操作,返回的往往是副本,本身不会改变。

    列表、集合、字典都是可变的,对它们操作,往往就是对本身进行操作。

    (python也提供了不可变的集合)

    3、列表用[]表示,元组用()表示,列表、元组都有索引、可进行索引相关操作,区别是列表可改变,元组不可改变。

    使用内置函数list()、tuple()可实现列表、元组的相互转换。

    可以先把列表转换为元组,来保护列表中的元素不被修改,操作完再转换回列表。

    可以把元组转换为列表,达到修改元组的目的,操作完再转换回元组。

    4、集合、字典都是用{}表示,{}表示空字典,空集合要使用set()来创建。

    5、字符串、列表、元组、集合、字典都具有多个元素,它们都可以使用python内置函数 len(x) 来获取x的元素个数。

    6、类型转换

    函数描述

    int(x [,base])

    将x转换为一个[base进制的]整数,base可选,默认为10

    float(x)

    将x转换为一个浮点数

    complex(real [,imag])

    创建一个复数,缺省imag时,虚部默认为0

    str(x)

    将 x 转换为字符串

    tuple(s)

    将序列 s 转换为一个元组

    list(s)

    将序列 s 转换为一个列表

    set(s)

    转换为集合

    frozenset(s)

    转换为不可变集合

    chr(x)

    将整数(ASCII码值)转换为字符

    ord(x)

    将字符转换为数值(ASCII码值)

    返回的均是副本,不会修改参数本身。

    格式:目标类型(需要转换的变量/值)

     字符、ASCII码值转换示例:

    print(chr(65))  #A
    print(ord("A"))  #65

    7、使用python的内置函数eval(str)可执行字符串中的python语句

    eval("print(1)")  #输出1
  • 相关阅读:
    leetcode Simplify Path
    leetcode Evaluate Reverse Polish Notation
    leetcode Swap Nodes in Pairs
    leetcode MinStack
    leetcode length of the last word
    empty能否代替isset?
    thinkphp框架的路径
    PHP 反射类的简单使用!
    在windows下配置redis扩展
    phpmyadmin的windows下和linux下的安装。
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11291802.html
Copyright © 2011-2022 走看看