python set、list、tuple、dict总结

#1、set集合

set是一个无序且不重复的元素集合。

  • 不重复(可去重)

  • 元素为不可变对象

  • 集合内部只能存放不可变的类型,数字、字符串、元组

  • 集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值

set的创建和空集合

     s=set()    
  1. 添加

     se.add(1)
    
  2. discard()-移除不存的元素不会报错

  3. remove()-移除不存的元素会报错

  4. pop()-移除末尾元素

  5. intersection() -取交集

     赋给新值
     se = {11, 22, 33}
     be = {22, 55}
    
     temp1 = se.intersection(be)             #取交集,赋给新值
     print(temp1)  # 22
     print(se)  # {11, 22, 33}
    
     temp2 = se.intersection_update(be)      #取交集并更新自己
     print(temp2)  # None
     print(se)  # 22
    
  6. 判断(isdisjoint()交集、issubset()子集、issuperset()父集)

     se = {11, 22, 33}
     be = {22}
     print(se.isdisjoint(be))        #False,判断是否不存在交集(有交集False,无交集True)
     print(se.issubset(be))          #False,判断se是否是be的子集合
     print(se.issuperset(be))        #True,判断se是否是be的父集合
    
  7. 合并(se和be的并集 减去 se和be的交集)

     se = {11, 22, 33}
     be = {22,55}
    
     temp1 = se.symmetric_difference(be)  # 合并不同项,并赋新值
     print(temp1)    #{33, 11, 55}
     print(se)       #{33, 11, 22}
    
     temp2 = se.symmetric_difference_update(be)  # 合并不同项,并更新自己
     print(temp2)    #None
     print(se)             #{33, 11, 55}
    
  8. 取并集(union)

     se = {11, 22, 33}
     be = {22,44,55}
    
     temp=se.union(be)   #取并集,并赋新值
     print(se)       #{33, 11, 22}
     print(temp)     #{33, 22, 55, 11, 44}
    

    合并且更新

     se = {11, 22, 33}
     be = {22,44,55}
    
     se.update(be)  # 把se和be合并,得出的值覆盖se
     print(se)
     se.update([66, 77])  # 可增加迭代项
     print(se)
    
  9. 类型转化

     se = set(range(4))
     #set ->list
     li = list(se)
     #set ->tuple
     tu = tuple(se)
     #set ->str
     st = str(se)
    

#2、List

  • 列表的数据项不需要具有相同的类型
  • 列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表
  • 加号 + 是列表连接运算符,星号 * 是重复操作。
  1. 统计(count())

        fruits = ['orange', 'apple', 'pear', 'banana']
        print (fruits.count('apple'))
    
  2. 判断是否存在(index()、in)

        print (fruits.index('apple')) #如果没有找到会异常
    	print ('apple' in fruits)
    	    		   
        从第三个位置开始寻找
        print (fruits.index('apple',3))
        #会报错的方法不推荐使用,通常使用in
    
  3. 反转(reverse())

    	fruits.reverse()
    
  4. 排序(sort())

    	fruits.sort()
    
  5. 增加元素(append()、extend())

    	fruits.append('kiwi')
    	# 增加集合
    	fruits.extend(['kiwi','water'])
    
  6. 合并两个列表

    	new_fruits=fruits+['kiwi','water']
    
  7. 插入元素(insert())

    	fruits.insert(0,'pick');
    
  8. 删除元素(remove()、del、分片)

    	fruits.remove('apple')
    	fruits.remove(fruits[2])
    	del fruits[1]
    	# 删除单个元素
    	fruits[1:2]=[]
    	# 删除多个元素
    	fruits[2:4]=[]
    
  9. 删除聊表末尾的元素(pop())

    	fruits.pop()
        fruits.pop(index)  #删除指定位置的元素
    
  10. 替换元素(分片)

    	fruits[0:3]=['橙子','苹果','梨']
    
  11. 拷贝(分片、copy())

       ff=fruits[:]
       fff=fruits.copy()
    
  12. 清空元素(clear()、del、分片)

    	fruits.clear()
       del fruits[:]  #不同于del fruits
       fruits[ : ]=[]
    
  13. 最大最小值(max()、min())

       print(max(fruits))
       print(min(fruits))
    
  14. 多维数组

       list01=[1,3,[5,7,9,11]]
    
    1. 浅拷贝(列表内元素地址发生改变,用id()查看,二维数组内地址不会改变)

      	list02=list01.copy()
      	list03=list01[:]
      
    2. 深拷贝(列表内元素地址完全改变,包括二维数组地址)

      	import copy		
      	list02=copy.deepcopy(list01)  
      
  15. 类型转化

       #list -> str
       list01 = ['I','love','python']
       list_str = str(list01)          #方式一  ['I', 'love', 'python']
       list_str01 = ''.join(list01)    #方式二  Ilovepython
       
       #list -> set
       list02 = set(list01)
    
       #list -> tuple
       list03 = tuple(list01)
    
  16. list去重

方法一:新建新数组

    list01 = [1,2,2,3,6,7,8,9]
    list02 = []
    for i in list01:
        if i not in list02:
            list02.append(i)
    print(list02)

方法二:

    list01=[1,2,2,2,3,4,2,5,4,2]
		le=len(list01)
		i=0
		while i<le-1:
		    j=i+1
		    while j<le:
		        if list01[i]==list01[j]:
		            list01.remove(list01[i])
		            le-=1
		            i-=1
		            break
		        j+=1
		    i+=1					
		print(list01)
		
		
方法三:(删除后面所有与当前元素相同的元素)

    list01=[1,2,2,2,3,4,2,5,4,2]
		le=len(list01)
		i=0
		while i<le-1:
		    j=i+1
		    while j<le:
		        if list01[i]==list01[j]:
		            list01.pop(j)
		            le-=1
		            j-=1
		        j+=1
		    i+=1
		
		print(list01)

#3、Tuple

  • 和字符串一样,tuple一旦创建就不能改变

  • 任意无符号的对象,以逗号隔开,默认为元组

    1. 创建

       s=() #空元组
      
    2. 访问(分片)

       t2=(10,20,30,40)
       print(t2[0:2])
      
    3. 修改

       修改元组是非法的
      
    4. 删除(del)

       del t2
       元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
      
    5. 元组运算符

       与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组
       Python表达式	           结果	          描述
       len((1, 2, 3))	        3	          计算元素个数
       (1, 2, 3) + (4, 5, 6)  (1, 2, 3, 4, 5, 6)	  连接
       ('Hi!',) * 4	       ('Hi!', 'Hi!', 'Hi!', 'Hi!')  复制
       3 in (1, 2, 3)	       True      	元素是否存在
       for x in (1, 2, 3): print (x,)   	1 2 3   	迭代
      
    6. 类型转换

       list01 = ('I', 'love', 'python')
       print(type(list01))
      
       # tuple -> str
       list02 =str(list01)
       print(list02)
       print(type(list02))
      
       # tuple -> set
       list03 = set(list01)
       print(list03)
       print(type(list03))
       
       # tuple -> list
       list03 = list(list01)
       print(list03)
       print(type(list03))
      
    7. 和list比较

    ①、Tuple 与 list 的相同之处

      定义 tuple 与定义 list 的方式相同, 除了整个元素集是用小括号包围的而不是方括号。
      Tuple 的元素与 list 一样按定义的次序进行排序。 Tuples 的索引与 list 一样从 0 开始, 所以一个非空 tuple 的第一个元素总是 t[0]。
      负数索引与 list 一样从 tuple 的尾部开始计数。
      与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时, 会得到一个新的 list ;当分割一个 tuple 时, 会得到一个新的 tuple。
    

    ②、Tuple 不存在的方法

      您不能向 tuple 增加元素。Tuple 没有 append 或 extend 方法。
      您不能从 tuple 删除元素。Tuple 没有 remove 或 pop 方法。
      然而, 您可以使用 in 来查看一个元素是否存在于 tuple 中。
    

    ③、用 Tuple 的好处

      Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。
      如果对不需要修改的数据进行 “写保护”,可以使代码更安全。
      使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。
      如果必须要改变这些值,则需要执行 tuple 到 list 的转换。
    

    ④、Tuple 与 list 的转换

      Tuple 可以转换成 list,反之亦然。内置的 tuple 函数接收一个 list,并返回一个有着相同元素的 tuple。
      而 list 函数接收一个 tuple 返回一个 list。从效果上看,tuple 冻结一个 list,而 list 解冻一个 tuple。
    

#4、dictionary

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

  • 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。(可用键值去重)

  • 和list和tuple一样,dictionary也可以:

      char={item:ord(item) for item in 'python'}    
      print(char)  
      #{'p': 112, 'y': 121, 't': 116, 'h': 104, 'o': 111, 'n': 110}
    
    1. 访问

       user={
       'name':{'firstName':'zhan','lastName':'liang'},
       'age':20,
       'address':'usa',
       'hobby':['film','sport']
       }
      
       print('user length:',len(user))
      
       print('user first property is :',user['name'])
       
       for key,value in user.items():
           print ('property %s value  %s' % (key,value))
       
       for kk in user.keys():
           print ('property %s' % (kk))
       
       for vv in user.values():
           print ('values %s' % (vv))
      

      如果想根据key的先后顺序遍历字典,则可以:

       for kk in sorted(user.keys()):
           print ('property %s' % (kk))
      
    2. 针对不存在的键,如果访问会出现错误。

       nation=user['nation'] #error
       
       #nation=user['nation'] if 'nation' in user else 'china'
      

      可以用get()避免

       nation=user.get('nation')            
       setdefault('key',default)如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值
       print(user.setdefault('ages',30))
      
    3. 删除元素(pop()、popitem()、clear())

       pop(key) 根据key删除元素
      
       res=user.pop('hobby')
       
       popitem() 删除最后一个元素
       
       clear() 清空字典
      
    4. 合并字典

       user.update(myuser) 把myuser合并到user中
      
    5. fromkeys()(把list变成keys)

       seq = ['Google', 'Runoob', 'Taobao']
       dict = dict.fromkeys(seq)
       dict = dict.fromkeys(seq, 10)
       print("新字典为 : %s" % str(dict))
      
    6. enumerate函数(把list变成value )

      Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:
      
       mylist=['A', 'B', 'C']
       print(dict(enumerate(mylist)))
       for i, value in enumerate(mylist):
             print(i,value)
      
    7. dict,string之间的相互转化

       s='{"id":"001","name":"python"}'
       # string to dict
       s_dict=eval(s)
       
       print(s_dict['id'])
       
       # dict to string
       
       s_string=str(s_dict)
       
       print(s_string)
      
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值