zoukankan      html  css  js  c++  java
  • Python基础数据类型-列表(list)和元组(tuple)和集合(set)

            Python基础数据类型-列表(list)和元组(tuple)和集合(set)

                                            作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

        本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟,请知晓。

    一.列表的定义与查询

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 NameList = ["尹正杰","林纳斯·托瓦兹(Linus Benedict Torvalds)","拉里·埃里森(Larry Ellison)","萨提亚·纳德拉(Satya Nadella)","蒂姆·库克(Tim Cook)"]
     8 RunningMan = ["赵薇","林心如","苏有朋","林志颖"]
     9 for Star in RunningMan:
    10     print(Star)                   #逐个打印列表的每个值
    11 
    12 print(RunningMan[0:-1:2])         #其效果等效于“print(RunningMan[::2]) ”,表示从第一个到最后一个只取前2个。
    13 print(RunningMan[::2])            #步长是2,空一格打印一个
    14 print(RunningMan[:])              #如果省略了数字就默认以0开头以-1结尾(即从头到尾的打印)
    15 
    16 print(NameList)                         #取值整个列表
    17 print(NameList.index("尹正杰"))         #查找出列表中的某个值所对应的索引ID
    18 print(NameList[0])                      #根据列表中的索引ID返回所对应的值
    19 print(NameList[0],NameList[3])          #取出第一个索引和第四个索引
    20 print(NameList[1:3])                    #从第二个索引开始取值,到第三个结束,该切片是顾头不顾尾
    21 print(NameList[-1])                     #取切片取值最后一个值,即倒着取
    22 print(NameList[-3:-1])                  #从倒数第三个开始取值,取到最后一个值。该切片也是顾头不顾尾哟
    23 print(NameList[-3:])                    #从倒数第三个数值开始取值,取到最后一个结束
    24 
    25 
    26 
    27 
    28 
    29 #以上代码执行结果如下:
    30 赵薇
    31 林心如
    32 苏有朋
    33 林志颖
    34 ['赵薇', '苏有朋']
    35 ['赵薇', '苏有朋']
    36 ['赵薇', '林心如', '苏有朋', '林志颖']
    37 ['尹正杰', '林纳斯·托瓦兹(Linus Benedict Torvalds)', '拉里·埃里森(Larry Ellison)', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)']
    38 0
    39 尹正杰
    40 尹正杰 萨提亚·纳德拉(Satya Nadella)
    41 ['林纳斯·托瓦兹(Linus Benedict Torvalds)', '拉里·埃里森(Larry Ellison)']
    42 蒂姆·库克(Tim Cook)
    43 ['拉里·埃里森(Larry Ellison)', '萨提亚·纳德拉(Satya Nadella)']
    44 ['拉里·埃里森(Larry Ellison)', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)']

    二.列表的基本使用

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 NameList = ["尹正杰","林纳斯·托瓦兹(Linus Benedict Torvalds)","拉里·埃里森(Larry Ellison)","萨提亚·纳德拉(Satya Nadella)","蒂姆·库克(Tim Cook)"]
     8 print(NameList)
     9 NameList.append("邓紫棋(Gloria Tang Tsz-Kei)")          #追加一个新的值,也就是插入末尾
    10 print(NameList)
    11 NameList.insert(1,"周杰伦(Jay Chou)")                     #在列表的第一个索引处插入一个新的值,前面的数字表示索引的位置,后面是对应该索引的值
    12 print(NameList)
    13 NameList.remove("拉里·埃里森(Larry Ellison)")             #删除元素为“拉里·埃里森(Larry Ellison)”的值
    14 print(NameList)
    15 del NameList[1]                                            #删除列表中第二个索引所对应的值
    16 print(NameList)
    17 NameList.pop(1)                                             #删除第二个索引的值
    18 print(NameList)
    19 NameList.pop()                                              #如果不加数字,默认删除最后一个数值
    20 print(NameList)
    21 NameList.clear()                                            #清空列表
    22 
    23 if len(NameList):
    24     print(NameList)
    25 else:
    26     print("SingerList为空!")
    27 
    28 
    29 
    30 
    31 
    32 #以上代码执行结果如下:
    33 ['尹正杰', '林纳斯·托瓦兹(Linus Benedict Torvalds)', '拉里·埃里森(Larry Ellison)', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)']
    34 ['尹正杰', '林纳斯·托瓦兹(Linus Benedict Torvalds)', '拉里·埃里森(Larry Ellison)', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)', '邓紫棋(Gloria Tang Tsz-Kei)']
    35 ['尹正杰', '周杰伦(Jay Chou)', '林纳斯·托瓦兹(Linus Benedict Torvalds)', '拉里·埃里森(Larry Ellison)', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)', '邓紫棋(Gloria Tang Tsz-Kei)']
    36 ['尹正杰', '周杰伦(Jay Chou)', '林纳斯·托瓦兹(Linus Benedict Torvalds)', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)', '邓紫棋(Gloria Tang Tsz-Kei)']
    37 ['尹正杰', '林纳斯·托瓦兹(Linus Benedict Torvalds)', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)', '邓紫棋(Gloria Tang Tsz-Kei)']
    38 ['尹正杰', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)', '邓紫棋(Gloria Tang Tsz-Kei)']
    39 ['尹正杰', '萨提亚·纳德拉(Satya Nadella)', '蒂姆·库克(Tim Cook)']
    40 SingerList为空!

    三.列表的高级操作

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 import copy
     8 
     9 NameList = ["yinzhengjie","Linus Benedict Torvalds","Larry Ellison","Satya Nadella","Tim Cook"]
    10 SingerList = ["Jay Chou","Gloria Tang Tsz-Kei","Jolin Tsai",["陈伟霆","刘诗诗","鹿晗"]]
    11 
    12 print(NameList)
    13 NameList.reverse()                              #反转列表,就是讲列表的初始顺序调换一下
    14 print(NameList)
    15 NameList.sort()                                #自动按照accsis编码排序,特殊字符会优先排序
    16 print(NameList)
    17 NameList.extend(SingerList)                     #扩展列表。可以将其他的列表追加到该列表来
    18 print(NameList)
    19 SingerListShallowCopy = SingerList.copy()       #浅拷贝,只拷贝第一层的(即第一层的变量不包括子列表会被独立的开辟一块内存地址),如果列表里面镶嵌了子列表,那么第二层的列表里面的所有数值都会当成一个内存地址(即2个列表共用的同一个内存地址,都把内存指针指向了这个内存地址)
    20 print("修改列表SingerList之前:",SingerList)
    21 SingerList[0] = "周杰伦"
    22 SingerList[3][0] = "William Chan"
    23 print("修改列表SingerList之后:",SingerList)
    24 print(SingerListShallowCopy)                        #我们会发现浅拷贝修改时,当源列表
    25 SingerListDeepCopy = copy.deepcopy(SingerList)      #导入copy模块,用这个模块的深度复制已达到完全的拷贝
    26 SingerList[0] = "Leehom Wang"
    27 SingerList[3][1] = "鞠婧祎"
    28 print(SingerList)
    29 print(SingerListDeepCopy)
    30 print("删除SingerList列表之前:",'SingerList' in locals().keys())
    31 del SingerList                  #删除列表
    32 print("删除SingerList列表之后:",'SingerList' in locals().keys())
    33 
    34 p1 = copy.copy(SingerListDeepCopy)  #浅拷贝的方式
    35 p2 = SingerListDeepCopy[:]
    36 p3 = list(SingerListDeepCopy)
    37 print(p1)
    38 print(p2)
    39 print(p3)
    40 
    41 p1[3][0] = 'yinzhengjie'
    42 p2[3][0] = 'yzj'
    43 p3[3][0] = "尹正杰"
    44 SingerListDeepCopy[3][0] = 'AAA'  #你会发现前面3中修改方式都不对哟!
    45 print(SingerListDeepCopy)
    46 print(p1)
    47 print(p2)
    48 print(p3)

    四.元组的使用

      元组是一种特殊的列表,他是不可变类型的,如果元组内部嵌套其他数据类型,如列表或者字典等等,则该索引下标(假如该下标的元素是一个列表,则该元素就拥有列表的所有特性,即这个元素列表的内部数据是可以实现增删改查的)的元素遵循它本有的属性。

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 NameList = ("yinzhengjie","Linus Benedict Torvalds","yinzhengjie",)          #定义一个元组(注意:,当元组里面的元素只有一个时,最好在后面加上一个逗号(","),不然Python不会认为它是一个元组哟,所以养成良好的习惯吧,我们以后可以在写的元组后面都加逗号),元组支持的方法列表都支持而且元组仅仅支持2种方法。
     8 
     9 print(NameList.count("yinzhengjie"))             #统计alex字符串在该列表出现的次数。
    10 
    11 print(NameList.index("yinzhengjie"))             #超照列表中的某个值所对应的索引ID,这个ID会和第一项匹配,如果出现了就直接匹配出来不会继续往下查找了.
    12 
    13 
    14 
    15 
    16 
    17 #以上代码执行结果如下:
    18 2
    19 0

     五.集合的应用

      其实集合也是一种特殊的列表,唯一不同的是,在集合中的每一个元素不允许重复而在列表里面是允许重复的。欢聚话说,将一个列表去重的列表就可以写成一个集合。当然集合是可变类型的,而我们上面说的元组是不可变类型的哟。集合和字典一样都是无序的,因此他们都没有索引下标。

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 name = {"yinzhengjie","yzj"}                      #定义一个集合,注意是大括号哟!如果你写的元素有重复,它会自动给你去重的!
     8 name2 = {"尹正杰","yinzhengjie"}
     9 name.add("Linus")                                   #向集合追加一个元素,如果元素存在,则不做任何修改。其实方法和列表用法几乎一致,参考列表的用法即可。
    10 print(name)
    11 name.discard("yinzhengjie")                             #这个函数是指定移除的集合元素
    12 print(name)
    13 name.update({"Larry Ellison","yinzhengjie",(1,2,3)})        #这个方法你可以理解为add的补充,它可以批量添加多个元素进去。集合可以嵌套元组,不能嵌套列表或是字典,更不能嵌套集合,如果你非要去嵌套一个,会抛错:“TypeError: unhashable type ...”
    14 print(name)
    15 
    16 v1 = name.difference(name2)                          #比较name和name2,将name中存在的元素而name2中不存在的元素赋值给v1。
    17 print(v1)
    18 # name.difference_update(name2)                       #它拥有difference的功能,只不过他多了一个操作,就是将difference得到的结果重新赋值给name,当然在此之前得清空name原有的数据。以下包含“*._update”的函数都有这个哟!
    19 # print(name)
    20 
    21 v2 = name.symmetric_difference(name2)                 #这里是取对称差集,就是讲name和name2中相互不存在的元素取出来赋值给v2。
    22 print(v2)
    23 
    24 v3 = name.intersection(name2)                         #这里是取两个集合(name和name2)的交集赋值给v3。
    25 print(v3)
    26 
    27 v4 = name.union(name2)                                #这里是取两个集合的并集。
    28 print(v4)
    29 
    30 for i in name :                                       #注意,集合是没有索引的,但是可以做for循环哟!
    31     print(i)
    32 
    33 
    34 
    35 
    36 #以上代码执行结果如下:
    37 {'Linus', 'yzj', 'yinzhengjie'}
    38 {'Linus', 'yzj'}
    39 {'Linus', (1, 2, 3), 'Larry Ellison', 'yinzhengjie', 'yzj'}
    40 {'Linus', 'Larry Ellison', 'yzj', (1, 2, 3)}
    41 {'尹正杰', 'Linus', 'yzj', (1, 2, 3), 'Larry Ellison'}
    42 {'yinzhengjie'}
    43 {'尹正杰', 'Linus', (1, 2, 3), 'Larry Ellison', 'yinzhengjie', 'yzj'}
    44 Linus
    45 (1, 2, 3)
    46 Larry Ellison
    47 yinzhengjie
    48 yzj
  • 相关阅读:
    注意! javascript和jquery的方法不能混淆!
    Fatal error: Call to undefined function mysqli_connect() 的解决方法
    Js中的冒泡排序
    sql的key的类型分类
    C# 结构和类的区别
    C#泛型初识2
    Javascript面向对象全面剖析 —创建对象
    C#泛型(初识)
    C# 构造函数日志
    C#隐式和显示类型转换
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/6790953.html
Copyright © 2011-2022 走看看