python列表

  • 用[]括起来
  • 元素可以为任意数据类型

创建空列表

li=[]

创建多元素列表

li = [1, 2, 3, "abcd", "city", "college", ["i", "love", "python"]]
print(li, type(li))
'''
[1, 2, 3, 'abcd', 'city', 'college', ['i', 'love', 'python']] <class 'list'>

'''

强转

sr = "abcd"
li = list(sr)
print(li, type(li))
'''
['a', 'b', 'c', 'd'] <class 'list'>

'''

常见的操作

(1)拼接

li1=["I"]
li2=["love","python"]
print(li1+li2)

'''
['I', 'love', 'python']
'''

(2)重复

li2=["love","python"]
print(li2*3)
'''
['love', 'python', 'love', 'python', 'love', 'python']

'''

(3)索引(偏移)[] ,切片[:],[::]

li = ["C", "i", "t", "y", "City", "College", "Zhejiang", ["city", "college", "zhejiang"]]
print(len(li))
print((li[0], li[-7]))
print(li[:5])
print(li[::-1])
print(li[7][1])
'''
8
('C', 'i')
['C', 'i', 't', 'y', 'City']
[['city', 'college', 'zhejiang'], 'Zhejiang', 'College', 'City', 'y', 't', 'i', 'C']
college

'''

(4)增删改查

  • append() 把列表为一个单位添加

    li = ["City", "College"]
    print(id(li))
    li1 = ["a", "b", "c"]
    li.append(li1)
    print(li, id(li))
    sr = "城市学院"
    li = []
    for i in sr:
        li.append(ord(i))
    print(li)
    '''
    1471082354184
    ['City', 'College', ['a', 'b', 'c']] 1471082354184
    [22478, 24066, 23398, 38498]
    
    '''
    
  • extend() 把列表中的元素取出一个个添加

    li = ["City", "College"]
    li1 = ["a", "b", "c"]
    li.extend(li1)
    print(li)
    '''
    ['City', 'College', 'a', 'b', 'c']
    
    '''
    
  • insert() 指定位置添加(添加的为一个单位)

    li = ["City", "College"]
    li1 = ["a", "b", "c"]
    li.insert(1, li1)
    print(li)
    '''
    ['City', ['a', 'b', 'c'], 'College']
    
    '''
    
  • pop() 可删除指定索引对应的元素,如果不指定则默认深处最后一个元素

    li = ["a", "b", "c", "d", "e"]
    print(li.pop(2))
    print(li)
    '''
    c
    ['a', 'b', 'd', 'e']
    
    '''
    
  • remove() 删除第一个遇到的指定元素,指定元素的话会报错

    li = ["a", "b", "c", "d", "e", "city", "e"]
    print(li.remove("e"))
    print(li)
    '''
    None
    ['a', 'b', 'c', 'd', 'city', 'e']
    
    '''
    
  • del 删除指定位置元素或者删除整个列表

    li = ["a", "b", "c", "d", "e", "city", "e"]
    del li[5]
    print(li)
    '''
    ['a', 'b', 'c', 'd', 'e', 'e']
    
    '''
    
    li = ["a", "b", "c", "d", "e", "city", "e"]
    del li
    print(li)
    '''
    NameError: name 'li' is not defined
    '''
    
  • clear

    li = ["a", "b", "c", "d", "e", "city", "e"]
    li.clear()
    print(li)
    '''
    []
    '''
    
  • 索引

  • 切片

(5)遍历

  • 元素遍历
li=["a","b","c"]
for i in li:
    print(i)
'''
a
b
c

'''
  • 索引遍历
li=["a","b","c"]
for i in range(len(li)):
    print(li[i])
'''
a
b
c

'''
  • 枚举遍历enumerate
li=["a","b","c"]
for i in enumerate(li, 15):  #也可以不指定开始的数字
    print(i)
'''
(15, 'a')
(16, 'b')
(17, 'c')
'''
li=["a","b","c"]
for index,value in enumerate(li[:2],2):
    print(index,value)
    
'''
2 a
3 b
'''

(6)其他操作

  • 计数,count()
  • 反转,reverse()
li = list("abcd")
print(li)
li.reverse()
print(li)
'''
['a', 'b', 'c', 'd']
['d', 'c', 'b', 'a']
'''
  • 排序sort()
li1 = ["a", "c", "d", "ba"]
li1.sort()
print(li1)
'''
['a', 'ba', 'c', 'd']
'''
li1 = ["a", "c", "d", "ba"]
li1.sort(reverse=True)
print(li1)
'''
['d', 'c', 'ba', 'a']
'''

赋值与深浅拷贝

  • 赋值
la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]]
lb = la
print(la)
print(lb)
print(id(la), id(lb))
la[5] = "aaa"
print(la)
print(lb)
'''
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
2768502805960 2768502805960
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]

'''
  • 浅拷贝

会创建新的对象,内容是原对象的引用

三种实现方式:

    • 切片操作[:]

      la=[1,2,3,4,5,"a",["b1","b2"]]
      lb = la
      lb2 = la[:]
      print(id(la), id(lb2))
      '''
      1869841716680 1869839894216
      
      '''
      
    • 工厂函数list(li)

    • copy模块内的copy函数

      #外层添加,lb不会跟着改变
      import copy
      
      la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]]
      lb_copy = copy.copy(la)
      print(id(la), id(lb_copy))  #id不同
      
      la.append("test")  # 添加原子类型,不会影响lb_copy
      print(la)
      print(lb_copy)
      '''
      2321739306376 2321739308680
      [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test']
      [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
      
      '''
      
      #外层修改,lb不会跟着改变
      import copy
      
      la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]]
      lb_copy = copy.copy(la)
      la[5] = "aaa"
      print(la)
      print(lb_copy)
      '''
      [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
      [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
      '''
      
      #内层修改,lb会随之改变
      import copy
      
      la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]]
      lb_copy = copy.copy(la)
      la[6][0] = "bbb"
      print(la)
      print(lb_copy)
      '''
      [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
      [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
      
      '''
      
  • 深拷贝

    import copy
    
    la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]]
    lb_deepcopy = copy.deepcopy(la)
    print(la, id(la))  #id不同
    print(lb_deepcopy, id(lb_deepcopy))
    la[5] = "aaa"  #修改外层,lb不跟着改变
    print(la)
    print(lb_deepcopy)
    '''
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1597438907784
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1597438910216
    [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    '''
    
    #修改内层,lb也不会随之改变
    import copy
    
    la = [1, 2, 3, 4, 5, "a", ["b1", "b2"]]
    lb_deepcopy = copy.deepcopy(la)
    '''
    [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']]
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    ‘’‘
    

浅拷贝相当于我们只拷贝了一层,修改外层元素会修改引用,让它们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置
深拷贝拷贝对象的所有元素,包括多层嵌套的元素,因此,是开辟了一个新的内存储存区,和数据源没有关系了

(7)列表解析式

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

print([x for x in range(10) if x % 2 == 0])
'''
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]

'''

(8)列表生成式

用来生成列表的特定的语法形式

sr = "城市学院"
print([ord(x) for x in sr])
'''
[22478, 24066, 23398, 38498]
'''

格式:[表达式 for 迭代元素 in 可迭代对象]

实现原理:

  • 迭代[可迭代对象]中的每一个元素
  • 每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值
  • 最后所有通过表达式计算的值以一个列表的形式返回
y = 10
x = y + 1 if y > 10 else y - 1
print(x)
'''
9
'''
name = ["Tom", "Jack", "Lucy"]
subject = ["python", "java", "c", "c++"]
li = []
for i in name:
    for j in subject:
        li.append([i, j])
print(li)

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++'], ['Lucy', 'python'], ['Lucy', 'java'], ['Lucy', 'c'], ['Lucy', 'c++']]
[['Tom', 'python'], ['Tom', 'java'], ['Tom', 'c'], ['Tom', 'c++'], ['Jack', 'python'], ['Jack', 'java'], ['Jack', 'c'], ['Jack', 'c++'], ['Lucy', 'python'], ['Lucy', 'java'], ['Lucy', 'c'], ['Lucy', 'c++']]
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值