python列表详解-4

本文详细介绍了Python列表的特点、创建方法、拼接、重复、索引与切片、增删查改操作,以及遍历、补充函数、拷贝和迭代等高级用法。内容包括append、extend、insert、pop、remove、del、clear等方法的使用,以及列表作为堆栈、计数、反转、排序等场景的应用。同时,文章还探讨了浅拷贝与深拷贝的区别,并给出了一些实际示例。
摘要由CSDN通过智能技术生成

1.列表

列表使用方括号括起来的[ ],每个元素以逗号分隔

可以储存不同的数据类型数据

1.1特点

  • 是一个有序的
  • 可以重复的
  • 可变类型

1.2创建

  • 创建空列表

    li=[]
    
  • 创建多元素列表

    li=[1,2,3,'a','gollege',['p','y','t']]
    

1.3拼接

li1=li2+li3

1.4重复

print(li1*3)

1.5索引(偏移),切片

li=['a','b','c','like','e','f']
print(len(li))
print((li[0],li[-1]))
print(li[1:5])
print(li[::-1])
print(li[3][2])

#输出结果
6
('a', 'f')
['b', 'c', 'like', 'e']
['f', 'e', 'like', 'c', 'b', 'a']
k

1.6增 删

  • 增:

    • append() 把列表为一个单位添加
    • extend() 把列表中的元素取出一个个添加
    • insert(位置,元素) 指定位置添加(添加的为一个单位)
    li1=["one","two",'a','b']
    li2=['lucky','boy']
    li1.append(li2)
    print(li1)
    #['one', 'two', 'a', 'b', ['lucky', 'boy']]
    
    li1.extend(li2)
    #['one', 'two', 'a', 'b', 'lucky', 'boy']
    
    li1.insert(1,li2)
    #['one', ['lucky', 'boy'], 'two', 'a', 'b']
    
    li1.extend(li2)
    li1[2:5]=["aa",'bb','cc']
    #['one', 'two', 'aa', 'bb', 'cc', 'boy']
    
  • 删:

    • pop()

      • 如果不指定索引,默认删除最后一个
      • 可删除指定索引对应的元素
      li1=["one","two",'a','b']
      li1.pop()
      li1.pop(1)
      print(li1)
      #['one', 'a']
      
    • remove()

      • 删除第一个遇到的指定元素
      • 无指定元素会报错
      li1=["one","two",'a','b','a']
      li1.remove('a')
      print(li1)
      #['one', 'two', 'b', 'a']
      
    • del

      • 删除指定位置元素
      li1=["one","two",'a','b','a']
      del li1[2]
      print(li1)
      #['one', 'two', 'b', 'a']
      
    • clear()

      • 清空
      li1=["one","two",'a','b','a']
      li1.clear()
      print(li1)
      #[]
      
    • 索引(1.5)
    • 切片

1.7遍历

  • 元素遍历
li1=["one","two",'a','b','a']
for i in li1:
    print(i,end=' ')
#one two a b a 
  • 索引遍历
li1=["one","two",'a','b','a']
for i in range(len(li1)):
    print(li1[i], end=" ")
#one two a b a 
  • 枚举遍历
    • enumerate(list,起始值) 同时获得索引值和元素
li1=["one","two",'a','b','a']
for i in enumerate(li1,2):
    print(i, end=" ")
#(2, 'one') (3, 'two') (4, 'a') (5, 'b') (6, 'a') 

li1=["one","two",'a','b','a']
for a,b in enumerate(li1[:2],2):
    print(a,b)
#2 one 3 two 

1.8补充函数

  • 堆和栈用列表可实现
  • 计数count()
  • 反转reverse()
li1=["one","two",'a','b','a']
li1.reverse()
print(li1)
#['a', 'b', 'a', 'two', 'one']
  • 排序sort()
li1.sort()
#['a', 'a', 'b', 'one', 'two']

li1.sort(reverse=True)
#['two', 'one', 'b', 'a', 'a']

例:两个列表交集

li1=["a","b",'c','d','e','e','d']
li2=['c','d','e','f','g']
li3=[]
def se(sr):
    for i in li3:
        if(i==sr):
            return False
    return True
for i in li1:
    for j in li2:
        if i==j and se(i):
            li3.append(i)
print(li3)

例:input()函数实现往空列表中添加元素,当输入“q”时,结束输入,并返回列表

li1=[]
while True:
    str=input("请输入元素:")
    if str=='q' :
        break
    li1.append(str)
print(li1)

例:随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0, 3], [1, 4], … , [10, 5]]

import random
li=[]
li1=[0]*11
for i in range(0,30):
    a=random.randint(0, 10)
    li1[a]+=1
for i in range(11):
    li.append([i,li1[i]])
print (li)

1.9拷贝

a=[1,2,3]
b=a
print(a,b)
a[1]=5
print(a,b)

[1, 2, 3] [1, 2, 3]
[1, 5, 3] [1, 5, 3]
  • 深浅拷贝的三种方法:
    • 切片[ : ]
    • list(li)
    • copy函数
la=[1,2,3,4,[1,2],6]
lb=la
lb2=la[:]
la[4][1]='a'
la[0]='a'
print(la,lb2)
#20399568 20400728
#['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 'a'], 6]

import  copy
la=[1,2,3,4,[1,2],6]
lb3=la.copy()
print(id(la),id(lb3))
la[4][1]='a'
la[0]='a'
print(la,lb3)
#61426264 62341728
['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 'a'], 6]

la=[1,2,3,4,[1,2],6]
lb4=list(la)
la[4][1]='a'
la[0]='a'
print(id(la),id(lb4))
print(la,lb4)
#5261912 46612888
['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 'a'], 6]

#深拷贝!!!!!!!
import copy
la=[1,2,3,4,[1,2],6]
lb5=copy.deepcopy(la)
la[4][1]='a'
la[0]='a'
print(id(la),id(lb5))
print(la,lb5)
#50742776 50742016
['a', 2, 3, 4, [1, 'a'], 6] [1, 2, 3, 4, [1, 2], 6]
  • 对象的引用
    • 浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改应用,让他指向另一个位置;修改嵌套列表的元素,列表地址没发生变化,还是指向同一位置。
    • 深拷贝拷贝所有元素,包括多层嵌套元素。因此是开辟了一个新的内存村塾去,和数据源没关系。

1.10迭代

print([x for x in range(10)])
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 实现原理
    • 迭代[可迭代对象]中的每一个元素
    • 每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新值
    • 最后可以计算通过一个列表返回

domo

lis=['one','two','a','b']
lis1=['a','b','c']
#过滤
li=[i for i in lis if i not in lis1]
print(li)
#['one', 'two']

a=[1,2,3]
b=['a','b','c']
print([[i,j] for i in a for j in b])
#[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值