2. Pyhton基础语法(2)

4.2 字典(Dictionary)

4.2.1 特点

  1. 采用键值对的形式(key:value)表示
  2. key不可以重复,value可以重复
  3. 可变数据,改变值其储存空间不变

4.2.2 创建

  1. {}

  2. Dict dict(key1=value1,.....)函数

  3. Dict dict.fomKeys([key1,key2,....],default_value=None)

    dictionary1={“name”:"Jack","sex":"male","age":25}
    type(dictionary1) --> <class 'dict'>
    dictionary1 --> {'name': 'Jack', 'sex': 'male', 'age': 25}
    dictionary2=dict.fromkeys(["name","sex","age"],"unknown")
    type(dictionary2) --> <class 'dict'>
    dictionary2 --> {'name': 'unkonown', 'sex': 'unkonown', 'age':'unknown'}
    

4.2.3 取值(查)

  1. value Dict[key]

  2. value Dict.get(key[,default_value])

    dictionary={“name”:"Jack","sex":"male","age":25}
    dictionary["name"] --> 'Jack'
    dictinnary["grade"] --> NameError
    dictionary.get("name") --> 'Jack'
    dictionary.get("grade") --> 
    dictionary.get("grade","unkonwn") --> 'unknown'
    

4.2.4 字典遍历

  1. for key in Dict:\n ......

    dictionary={"name":"Jack","age":"25"}
    for key in dictionary:
        print(key,"---",dictionary[key])
        
    Result:
        name --- Jack
     age --- 25
    
  2. for key,value in Dict.items():\n ......

    dictionary={"name":"Jack","age":"25"}
    for key,value in dictionary.items():
        print(key,"---",value)
        
    Result:
     name --- Jack
     age --- 25
    

4.2.5 字典的增删改操作

  1. Dict[key]=new_value

  2. void Dict.update({key1:new_value1,key2:value2,.....})

  3. 增操作与改操作相同,有则更新,无则增加(上面两种方法都可以)

  4. value Dict.pop(key) --> 删除key对应的一项

  5. Tuple Dict.popitem() --> 删除最后一项

  6. void Dict.clear() --> 清空字典

    dict={"name":"Jack","sex":"male","age":"25"}
    dict --> {'name': 'Jack', 'sex': 'male', 'age': '25'}
    dict["job"]="police"  #1
    dict --> {'name': 'Jack', 'sex': 'male', 'age': '25', 'job': 'police'}
    dict["age"]=25  #3
    dict --> {'name': 'Jack', 'sex': 'male', 'age': 25, 'job': 'police'}
    dict.update({"dpt":"indentification","sal":5000})  #2
    dict --> {'name': 'Jack', 'sex': 'male', 'age': 25, 'job': 'police', 'dpt': 'indentification', 'sal': 5000}
    dict.pop("dpt") --> 'indentification'  #4
    dict --> {'name': 'Jack', 'sex': 'male', 'age': 25, 'job': 'police', 'sal': 5000}
    dict.popitem() --> ('sal', 5000)  #5
    dict --> {'name': 'Jack', 'sex': 'male', 'age': 25, 'job': 'police'}
    dict.clear()  #6
    dict --> {}
    

4.2.5 字典的其它操作

  1. value Dict.setdefault(key,value) --> 设置默认值,如果key存在,可以忽略

  2. Dict_keys Dict.keys()

  3. Dict_values Dict.values()

  4. Dict_items Dict.items()

  5. 2、3、4都是获取字典视图,字典变化,视图变化

  6. 老版本字典格式化字符串“%(key1)s,%(key2)s" %Dict

  7. python3之后字典格式化字符串 “{key1},{key2}”.format_map(Dict)

    dict={"name":"Jack","sex":"male","age":"25"}
    dict["dept"] --> KeyError
    dict.setdefault("deft","None") --> 'None'
    dict["dept"] --> KeyError
    type(dict.keys) --> <class 'builtin_function_or_method'>
    type(dict.values) --> <class 'builtin_function_or_method'>
    type(dict.items) --> <class 'builtin_function_or_method'>
    print("%(name)s--%(age)s"%dict) --> Jack--25
    print("{name}--{age}".format_map(dict)) --> Jack--25
    

4.2.5 散列值(Hash)和字典的储存原理

  1. int hash(value) --> 在多次运行时,数据是不一样的
  2. 字典储存原理:将Key先转换为Hash值,再在对应内存空间中放入Value。内存地址==Key Hash值。所以,字典中储存数据不是按顺序来。
  3. 字典在内存中不连续储存,列表连续储存。

4.2.5 应用

  1. 在C++课设中,房间信息可以用字典来储存

5. 元组与集合

5.1 元组(Tuple)

5.1.1介绍

  1. Tuple是不变List,创建之后不能修改,只能创建,本身元素只能查操作(元组中有列表,则列表中数据可以写),且查操作与List相同
  2. Tuple使用()

5.1.2 元组运算符

  1. Tuple3=Tuple1+Tuple2

  2. Tuple2=Tuple*count

  3. 元组运算符适用于列表,但是前后类型应该相同

    [1,2,3]+[4,5,6] --> [1, 2, 3, 4, 5, 6]
    [1,2,3]*3 --> [1, 2, 3, 1, 2, 3, 1, 2, 3]
    (1,2,3)+(4,5,6) --> (1, 2, 3, 4, 5, 6)
    (1,2,3)*2 --> (1, 2, 3, 1, 2, 3)
    (1,)*2 --> (1, 1)
    (1)*2 --> 2
    [1]*2 --> [1, 1]
    

5.1.2 元组创建

  1. (element,…….)
  2. element,……..
  3. 元组只有一个元素时,元素后面必须要有逗号,否则视为普通括号中的其它数据

5.1.3 列表与元组的区别和应用

  1. 内容:List内存中内容可以改变,Tuple内存中内容不可改变
  2. 内存:List内存动态变化,Tuple内存固定不变
  3. 效率:List效率低,Tuple效率高
  4. 使用:List用于保存运行时需要变化的数据,Tuple用于保存不用改变的数据

5.2 序列

5.2.1 介绍

  1. 序列中元素是有序的
  2. 序列是有索引的
  3. String、List、Tuple、Range(数字序列)都是序列,是数据结构的统称

5.2.2 数字序列的创建

  1. Range range(begin_num,edn_num[,step])

    range(1,4) --> range(1,4)
    range(1,10,2) --> range(1,10,2)
    

5.2.3 Range遍历其它序列和应用

  1. 遍历String
  2. 遍历List
  3. 遍历Tuple
  4. 质数

5.2.3 序列类型互相转换

  1. List list(sequence) --> 转换为列表

  2. Tuple tuple(sequence) --> 转换为元组

  3. String element.join(String_Tuple/List) String str() --> 转换为字符串

  4. List String.split(element) --> 传入分割元素,分割String,返回List

  5. List String.splitlies() --> 按行分割String

  6. for循环 --> 辅助使用,将数字转换为String

    #转换为List  #1,4,5
    list((1,2,3,4)) --> [1, 2, 3, 4]
    list("abcd") --> ['a', 'b', 'c', 'd']
    list(range(0,11,2)) --> [0, 2, 4, 6, 8, 10]
    "1,2,3,4".split(",") --> ['1', '2', '3', '4']
    "1\n2\n3\n4".splitlines() --> ['1', '2', '3', '4']
    #转换为Tuple  #2
    tuple("hello") --> ('h', 'e', 'l', 'l', 'o')
    tuple([1,2,3]) --> (1, 2, 3)
    tuple(range(1,5)) --> (1, 2, 3, 4)
    #转换为String
    #使用到join()函数  #3
    ",".join("hello") --> 'h,e,l,l,o'
    ",".join(("a","b","c")) --> 'a,b,c'
    ",".join(["a","b","c"]) --> 'a,b,c'
    "".join(("a","b","c")) --> 'abc'
    "".join(["a","b","c"]) --> 'abc'
    #使用str()函数  #3
    str(["a","b","c"] --> "['a', 'b', 'c']"
    str(range(1,5)) --> 'range(1, 5)'
    str(("a","b")) --> "('a', 'b')"
    #range()-->String  #6
    string = ""
    for i in range(1,5):
        string+=str(i)
    string --> '1234'
    

5.3 集合(Set)

5.3.1 介绍

  1. 集合是没有value的字典,可以参考数学中集合
  2. 无序性、互异性
  3. 可变数据类型、允许数学运算、分散储存
  4. 集合生成Hash,Hash内存储存数据

5.3.2 集合的创建

  1. {}

  2. Set set(anthor_type(Tuple/String/List))

  3. 空集合的创建不能用{},应该用set()

    dict={}
    type(dict) --> <class 'dict'>
    set=set()
    type(set) --> <class 'set'>
    set={1,2,3}
    set((1,2,3)) --> {1,2,3}
    set([1,2,3]) --> {1,2,3}
    set("hello") --> {'l', 'o', 'e', 'h'}
    set(range(1,6)) --> {1, 2, 3, 4, 5}
    

5.3.3 集合的数学运算(交集、并集、差集)

  1. Set Set1.intersection(Set2)

  2. Set set1&set2 --> 交集

  3. void Set1.intersection_update(Set2)

  4. Set Set1.union(Set2)

  5. Set set1|set2 --> 并集

  6. void Set1.union(Set2) --> 不存在

  7. Set Set1.difference(Set2) 差集(Set1中Set2不存在的元素)

  8. Set set1-set2 --> 差集

  9. Set Set1.symmetric_difference(Set2) --> 双向差集,两个集合中都不存在的元素

  10. void Set1.difference_update(Set2)

  11. void Set1.symmetric_difference_update(Set2)

  12. set1,set2 --> 两个Set合成为一个Tuple

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    #交集
    set1.intersection(set2) --> {4, 5}  #1
    set1&set2 --> {4, 5}  #2
    set1.intersection_update(set2)  #3
    set1 --> {4, 5}
    #并集
    set1={1,2,3,4,5}
    set1.union(set2) --> {1, 2, 3, 4, 5, 6, 7, 8}  #4
    set1|set2 --> {1, 2, 3, 4, 5, 6, 7, 8}  #5
    #差集
    set1.difference(set2) --> {1, 2, 3}  #7
    set1-set2 --> {1, 2, 3}  #8
    set1.symmetric_difference(set2) --> {1, 2, 3, 6, 7, 8}  #9
    set1.difference_update(set2)  #10
    set1 --> {1,2,3}
    set1={1,2,3,4,5}
    set1.symmetric_difference_update(set2)  #11
    set1 --> {1, 2, 3, 6, 7, 8}
    #合并为tuple
    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    st1,set2 --> ({1, 2, 3, 4, 5}, {4, 5, 6, 7, 8})  #12
    

5.3.4 集合间的关系操作

  1. Bool Set1==Set2

  2. Bool Set1.issubset(Set2) --> Set1是不是Set2的子集

  3. Bool Set1.issuperset(Set2) --> Set1是否为Set2的父集

  4. Bool Set1.isdisjoint(Set2) --> Set1和Set2中是否有重复元素

    # 2
    set1={1,2}
    set2={1,2,3}
    set1.issubset(set2) --> True
    set1={1,2,5}
    set1.issubset(set2) --> False
    # 3
    set1={1,2,3,4}
    set2={2,3}
    set1.issuperset(set2) --> True
    set2={7,8}
    set1.issuperset(set2) --> False
    # 4
    set1={1,2,3,4,5}
    set2={6,7,8,9}
    set1.isdisjoint(set2) --> True
    set1={6,7}
    set1.isdisjoint(set2) --> False
    

5.3.5 集合的增删

  1. void Set1.add(element)

  2. void Set1.update(Tuple/List/Dict)

  3. 不可直接改

  4. void Set.remove(element) --> 不存在报错

  5. void Set.discard(element) --> 不存在不报错

    set1={1,2,3,4,5}
    set1.add(0)  #1
    set1 --> {0, 1, 2, 3, 4, 5}
    set1={1,2,3,4,5}
    set1.update([6,7,8])  #2
    set1 --> {1, 2, 3, 4, 5, 6, 7, 8}
    set1={1,2,3,4,5}
    set1.update((6,7,8))  #2
    set1 --> {1, 2, 3, 4, 5, 6, 7, 8}
    set1={1,2,3,4,5}
    set1.update({6,7,8})  #2
    set1 --> {1, 2, 3, 4, 5, 6, 7, 8}
    set1={1,2,3,4,5}
    set1.update(range(10,16))  #2
    set1 --> {1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15}
    set1={1,2,3,4,5}
    set1.remove(1)  #4
    set1 --> {2, 3, 4, 5}
    set1.remove(0) -->KeyError  #4
    set1 --> {1,2,3,4,5}
    set1.discard(1)  #5
    set1 --> {2, 3, 4, 5}
    set1.discard(0)  #5
    

5.4 内置生成式

  1. 列表生成式 List=[i*10 for i in range(10,20)... if i%2 == 0...]

    list=[i*j for i in range(1,5) for j in range(1,5) if i%2==0]
    list
    
    Result:
     [2, 4, 6, 8, 4, 8, 12, 16]
    
  2. 字典生成式 Dict={i*10 for i in range(10,20)... if i%2 == 0...}

    fruits=["apple","banana","orange"]
    dict={i:fruits[i] for i in range(0,len(fruits))}
    dict
    
    Result:
        {0: 'apple', 1: 'banana', 2: 'orange'}
    
  3. 集合生成式 Set={i*10 for i in range(10,20)... if i%2 == 0...}

    set={i*j for i in range(1,5) for j in range(1,5) if i%2==0}
    set
    
    Result:
     {2, 4, 6, 8, 12, 16}
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容