Python-7-List列表

一、基础

  1. 列表的数据项不需要具有相同的类型 -->里面数据项地址不一定会相邻

     list01=[1,2,3,'hello']
     print(id(list01))  # 1833720636040
     print(id(list01[0]))  # 140704119612048
     print(id(list01[1]))  # 140704119612080
     print(id(list01[2]))  # 140704119612112
     print(id(list01[3]))  # 1833721071576
    
  2. List(列表) 是 Python 中使用最频繁的数据类型。

  3. 列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。

  4. 列表形式:list01 = [1, 2, ‘hello’, 4]

  5. 列表不是链表,因为list是保存到其内容对应的地址,链表是直接连接

  6. 列表为可变对象

     list01=[1,3,5,7,9]
     list01[0]=10
     print(list01)
    
  7. 列表切片

    列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表
    从左到右索引默认 0 开始,从右到左索引默认 -1开始
    加号 + 是列表连接运算符,星号 * 是重复操作。

     list=[1,3,5,7,9,11]
     list    # 输出完整列表
     list[0] 	# 输出列表的第一个元素
     list[-1]    # 输出列表的最后一个元素
     list[1:3]   # 输出第二个至第三个元素 
     list[2:]    # 输出从第三个开始至列表末尾的所有元素
     list[::2]   # 步长为2
     list[::-1]  # 反转数组
     list[-1:-3:-1]  # 从后往前截取
     list * 2    # 输出列表两次
     list + tinylist # 打印组合的列表
     
     for item in range(len(arr)):   
        print(arr(item))        
     
     for item in arr:   
        print(item)       
    

二、list 操作

    fruits = ['orange', 'apple', 'pear', 'banana']
  1. count():统计

         print (fruits.count('apple'))
    
  2. index():找到为位置,找不到为异常,判断是否存在

         fruits=['orange','apple','pear','banana']
         if 'apple' in fruits:  # 用in解决异常
             index=fruits.index('apple')
             print(index)
     
         #demo--模糊搜索
         fuits = ['orange', 'apple', 'pear', 'banana','apples','big apple']
         condition='app'
         res=[]
         for f in fruits:
             if condition in f:
                 res.append(f)
         print(res)
    
  3. reverse():反转

     	fruits=['orange','apple','pear','banana']
         fruits.reverse()
         print(fruits)  # ['banana', 'pear', 'apple', 'orange']
    
  4. 排序sort()

         list01=[1,20,3,4]
         list01.sort()  # 默认从小到大
         print(list01)  # [1, 3, 4, 20]
         list01.sort(reverse=True)#从大到小
         print(list01)  # [20, 4, 3, 1]
         print(list01.sort()) #sort.()返回值为None
    
  5. 增加 增加元素:append() ,增加集合:extend() +连接

    增加元素append():地址不变
    增加集合extend([]):地址不变,相当于list0+list1的结果
    增加集合+[]连接:地址改变

         f0 = ['apple','orange','banana','pear']
         print('原列表:','地址为:',id(f0),f0)  # 原列表: 地址为: 2818495219208 ['apple', 'orange', 'banana', 'pear']
         
         f0.append('append')
         print('append增加元素后:','地址为:',id(f0),f0)  # append增加元素后: 地址为: 2818495219208 ['apple', 'orange', 'banana', 'pear', 'append']
         
         f0.extend(['extend'])
         print('extend增加集合后:','地址为:',id(f0),f0)  # extend增加集合后: 地址为: 2818495219208 ['apple', 'orange', 'banana', 'pear', 'append', 'extend']
         
         f1 = f0 + ['+连接']
         print('+连接后:','地址为:',id(f1),f1)  # +连接后: 地址为: 2818495525064 ['apple', 'orange', 'banana', 'pear', 'append', 'extend', '+连接']
    
  6. 合并两个列表

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

         fruits = ['apple','pear']
         fruits.insert(1,'pick')
         print(fruits)  # ['apple', 'pick', 'pear']
    
  8. 删除元素 pop(index) ,remove(list[index]) ,del, [:]=[]

    pop(i):i为空时,默认删除最后一个,为i时,删除下标为i的
    pop()比remove()效率高
    remove(a):在列表中找不到a时,则停止执行

         fruits0 = ['apple','pear','orange']
         fruits0.pop(2)  # ['apple', 'pear']
         print(fruits0)
         
         fruits = ['apple','pear','orange']
         fruits.remove('apple')
         print(fruits)  # ['pear', 'orange']
         fruits.remove(fruits[1])
         print(fruits)  # ['pear']
         
         fruits1 = ['apple','pear','orange','banana','watermelon']
         del fruits1[1]  #del回收内存
         print(fruits1) # ['apple', 'orange', 'banana', 'watermelon']
         
         fruits1[1:3]=[]
         print(fruits1) # ['apple', 'watermelon']
    
  9. 清空元素

         fruits = ['apple','pear','orange','banana','watermelon']
         fruits=[]
         fruits[:]=[]
         fruits.clear()  # 第三个更好
         del fruits[:]    #不同于del fruits
    
  10. 最大最小值

        list01=[1,2,3,4]
        print(max(list01)) # 4
        print(min(list01)) # 1
        print(sum(list01)) # 10 
    

三、多维列表

  1. 多维列表的访问和遍历

     print('多维列表:')
     list01=[[1,2],[3,4],[5,6]]
     list02=[10,20,[100,200]]
     print(list02[2][1]) # 200
     for i in list01:
         for j in i:  # 这样循环list02会停止
             print(j)
    
  2. demo–找最长的单词

     def LogestWord(sen):
         words=''.join(([',',c][ int(c.isalpha())]for c in sen )).split(',') # 1为c,0为,
         maxLen=max(len(i) for i in words )
         return [i for i in words if len(i)==maxLen][0]
     print(LogestWord('fun! times 7643579'))  # times
    

四、list去重

  1. 方法一:新建新列表list

  2. 方法二:(删除前面所有与后面元素相同的元素)

     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)
    
  3. 方法三:(删除后面所有与当前元素相同的元素)

     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)
    

五、list拷贝

列表可以拷贝,即拷贝完后两地址不同(string不可拷贝)
参考资料:https://www.cnblogs.com/pyramid1001/p/5844905.html

    import copy
    list01 = [1, 3, 5, 7, 9]
    list02 = list01  # 不是拷贝,传引用/地址,id(list01) == id(list02)
    list03 = list01[:]  # 浅拷贝,id(list03) != id(list01)
    list04 = list01.copy()  # 浅拷贝,id(list04) != id(list01)
    list05 = copy.copy(list01)  # 浅拷贝,id(list05) != id(list01)
    list06 = copy.deepcopy(list01)  # 深拷贝,id(list06) != id(list01)

深、浅拷贝对列表的影响:

        import copy
        list01=[10,20,[100,200]]
        list02=list01.copy() #浅拷贝 list[:] copy.copy(list) list.copy()
        list02=copy.deepcopy(list01) #深拷贝 copy.deepcopy()
        
        print(id(list01[0]),id(list02[0]))  # 深、浅拷贝两个地址相同
        print(id(list01[2]),id(list02[2]))  # 浅拷贝两个地址相同,深拷贝两个地址不同
        
        list01[2][0]=1000
        print(list01)
        print(list02)  # 浅拷贝变为1000,深拷贝不变
        print(id(list01[2]),id(list02[2]))  # 浅拷贝两个地址相同,深拷贝两个地址不同
        
        list01[0]=50
        print(list01)
        print(list02)  # 浅拷贝、深拷贝均不变
        print(id(list01[0]),id(list02[0]))  # 浅、深拷贝两个地址均不同

深、浅拷贝只针对于列表中的列表
当改变一个列表中的一个数字时,
深、浅拷贝均不影响另一个列表的数字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值