列表

列表的常见操作

  • append()
li=['city','college']
print(id(li))
li1=['a','b','c']
li.append(li1)
print(id(li))
print(li)
#输出
55457232
55457232
['city', 'college', ['a', 'b', 'c']]
sr='城市学院'
li= []
for i in sr:
    li.append(ord(i))
print(li)
#输出
[22478, 24066, 23398, 38498]

  • extend()
li=['city','college']
li.extend('abcded')
print(li)
#输出
['city', 'college', 'a', 'b', 'c', 'd', 'e', 'd']  #注意与append的区别,extend是将元素拆分后添加进列表
  • insert()
li=['city','college']
li.insert(1,'abcded')
print(li)
#输出
['city', 'abcded', 'college']

  • 直接根据下标重新赋值
li=['city','college',1,2,3,4]
li[5]='abc'
print(li)
li[1:4]=['a','b','c','d',9,7,5,2]
print(li)
li[1:4]=['AJISBDIU']
print(li)
#输出
['city', 'college', 1, 2, 3, 'abc']
['city', 'a', 'b', 'c', 'd', 9, 7, 5, 2, 3, 'abc']
['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc']

删除

  • -pop
    • 如果不指定索引默认参数最后一个
    • 如果指定了,则删除指定索引对应的元素
    • 返回值为删除的元素
li=['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc']
print(li.pop())
print(li)
print(li.pop(2))
print(li)
#输出
abc
['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3]
d
['city', 'AJISBDIU', 9, 7, 5, 2, 3]
  • del
    • 删除列表指定元素或者删除列表
li=['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc','city']
del li[1]
print(li)
del li
#  print(li)   #li列表已经被删除,会报错li列表未定义

#输出
['city', 'd', 9, 7, 5, 2, 3, 'abc', 'city']

  • clear
    • 清空列表所有元素
li=['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc','city']
li.clear()
print(li)
#输出
[]
  • remove
    • 没有返回值
    • 移除第一次遇到指定元素
li=['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc','city']
print(li.remove('city'))
print(li)
#输出
None
['AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc', 'city']

  • 元素遍历
li=['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc','city']
for i in li:
    print(i,end=' ')
#输出
city AJISBDIU d 9 7 5 2 3 abc city 
  • 索引遍历
li=['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc','city']
for i in range(len(li)):
    print(li[i],end=' ')
#输出
city AJISBDIU d 9 7 5 2 3 abc city 
  • 枚举遍历
    • enumerate(),对于一个可迭代的/可遍历的对象,将其组成一个索引序列,利用他,我们可以同时获取索引和值.
li=['city', 'AJISBDIU', 'd', 9, 7, 5, 2, 3, 'abc','city']
for i in enumerate(li,3):   #3表示索引开始值,默认0
    print(i)
#输出
(3, 'city')
(4, 'AJISBDIU')
(5, 'd')
(6, 9)
(7, 7)
(8, 5)
(9, 2)
(10, 3)
(11, 'abc')
(12, 'city')

其他操作

计数

  • count(‘x’)-
    • 统计值为x元素出现的次数
li=[9, 7, 5, 2, 3,3,3,3]
li.count(3)
print(li.count(3))
#输出
4

反转

  • reverse()
li=[9, 7, 5, 2, 3,3,3,3]
li.reverse()
print(li)
#输出
[3, 3, 3, 3, 2, 5, 7, 9]

排序

  • sort()
    • 默认从小到大(ASCII码)
li=[9, 7, 5, 2, 3,3,3,3]
li.sort()
print(li)
#输出
[2, 3, 3, 3, 3, 5, 7, 9]
  • sort(reverse=True)
    • 从大到小
li=[9, 7, 5, 2, 3,3,3,3,4,5,1555]
li.sort(reverse=True)
print(li)
#输出
[1555, 9, 7, 5, 5, 4, 3, 3, 3, 3, 2]

赋值与深浅拷贝

  • 赋值是对对象的引用
li1=[1,2,3,4,5,'a','b',['b1','b2']]
li2=li1
print((li1,li2))
print((id(li1),id(li2)))
print(li1 is li2)


li1[5] = 'aaa'
print(li1)
print(li2)
#输出
([1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']], [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']])
(88276904, 88276904)
True
[1, 2, 3, 4, 5, 'aaa', 'b', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'aaa', 'b', ['b1', 'b2']]
  • 深浅拷贝

    • 浅拷贝会创建新对象,内容是原对象的引用

    • 三种实现方法:

      • 切片操作[:]
      li1=[1,2,3,4,5,'a','b',['b1','b2']]
      li3=li1[:]
      print((id(li1),id(li3)))
      print(li1 is li3)
      
      
      li1[5] = 'aaa'
      print(li1)
      print(li3)
      #输出
      (93847504, 93809360)
      False
      [1, 2, 3, 4, 5, 'aaa', 'b', ['b1', 'b2']]
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']]
      
      • 工厂函数list(li)
      • copy模块内的copy函数
      import copy
      
      
      li1=[1,2,3,4,5,'a','b',['b1','b2']]
      li3=copy.copy(li1)
      print((id(li1),id(li3)))
      print(li1 is li3)
      
      li1.append('test')  #添加原子类型,不会影响li3
      print(li1)
      print(li3)
      print('li1[7]的id:',id(li1[7]))
      print('li3[7]的id:',id(li3[7]))
      li1[5] = 'aaa'
      print(li1)
      print(li3)
      print('li1[7]的id:',id(li1[7]))
      print('li3[7]的id:',id(li3[7]))
      li1[7][0]='bbb'
      print(li1)			#浅拷贝只拷贝第一层内容,深层次的依然使用指向的方式寻找
      print(li3)          #此时会修改li1和li3的值,原因为li1[7]和li3[7]指向同一个地址
      print('li1[7]的id:',id(li1[7]))
      print('li3[7]的id:',id(li3[7]))
      #输出
      (19508320, 19507600)
      False
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2'], 'test']
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']]
      li1[7]id19466720
      li3[7]id19466720
      [1, 2, 3, 4, 5, 'aaa', 'b', ['b1', 'b2'], 'test']
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']]
      li1[7]id19466720
      li3[7]id19466720
      [1, 2, 3, 4, 5, 'aaa', 'b', ['bbb', 'b2'], 'test']
      [1, 2, 3, 4, 5, 'a', 'b', ['bbb', 'b2']]
      li1[7]id19466720
      li3[7]id19466720
      
      • 浅拷贝相当于只拷贝了一层,修改外层元素,会修改引用,让他指向另外一个位置,修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个地址。
    • 深拷贝

      • 使用copy模块的deepcopy
      import copy
      li1=[1,2,3,4,5,'a','b',['b1','b2']]
      li2=copy.deepcopy(li1)
      print(li1,'\n',id(li1))
      print(li2,'\n',id(li2))
      
      li1[5]='qwe'
      print(li1,'\n',id(li1))
      print(li2,'\n',id(li2))
      
      li1[7][0]='aaa'
      print(li1,'\n',id(li1))
      print(li2,'\n',id(li2))
      #输出
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']] 
       89828808
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']] 
       89860696
      [1, 2, 3, 4, 5, 'qwe', 'b', ['b1', 'b2']] 
       89828808
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']] 
       89860696
      [1, 2, 3, 4, 5, 'qwe', 'b', ['aaa', 'b2']]   #深拷贝拷贝全部层次的内容
       89828808
      [1, 2, 3, 4, 5, 'a', 'b', ['b1', 'b2']] 
       89860696
      
      • 深拷贝拷贝对象全部的内容。

列表解析式

li=[]
for i in range(10):
    li.append(i)
print(li)

print([i for i in range(10)]) 
#输出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表生成式

  • 用来生成列表的特定语法形式
  • 格式:
[表达式 for 迭代元素 in 可迭代对象]
  • 实现原理
    • 迭代[可迭代对象]中的每一个元素
    • 每迭代一次的结果赋值给对应的迭代元素,通过表达式运算得到一个新的值
    • 最后所有通过表达式计算的值以一个列表的形式返回。
  • 带过滤功能格式
[exp for iter_val in iter if if_condtion]
print([i for i in range(10) if i % 2 == 0])   #获取1-10之前的偶数
#输出
[0, 2, 4, 6, 8]
name = ['Tom','jack','Riku']
subject = ['Python','Java','C','C++']

print([ [i,j] for i in name for j in subject])
#输出
[['Tom', 'Python'], ['Tom', 'Java'], ['Tom', 'C'], ['Tom', 'C++'], ['jack', 'Python'], ['jack', 'Java'], ['jack', 'C'], ['jack', 'C++'], ['Riku', 'Python'], ['Riku', 'Java'], ['Riku', 'C'], ['Riku', 'C++']]
  • 拓展:

    • 三目运算符
    y = 55
    x = y + 1 if y < 10 else y - 1		#如果y<10 x=y+1,若不成立则x=y-1
    print(x)
    #输出
    54
    
    • 一行输出99乘法表

print(’\n’.join([’\t’.join([’%2s %2s=%2s’%(i,j,ij) for j in range(1,i+1)]) for i in range(1,10)]))
#输出
1 * 1= 1
2 * 1= 2 2 * 2= 4
3 * 1= 3 3 * 2= 6 3 * 3= 9
4 * 1= 4 4 * 2= 8 4 * 3=12 4 * 4=16
5 * 1= 5 5 * 2=10 5 * 3=15 5 * 4=20 5 * 5=25
6 * 1= 6 6 * 2=12 6 * 3=18 6 * 4=24 6 * 5=30 6 * 6=36
7 * 1= 7 7 * 2=14 7 * 3=21 7 * 4=28 7 * 5=35 7 * 6=42 7 * 7=49
8 * 1= 8 8 * 2=16 8 * 3=24 8 * 4=32 8 * 5=40 8 * 6=48 8 * 7=56 8 * 8=64
9 * 1= 9 9 * 2=18 9 * 3=27 9 * 4=36 9 * 5=45 9 * 6=54 9 * 7=63 9 * 8= 9 * 9=81


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值