Python学习日志——列表与元组

本文详细介绍了Python中的列表和元组。列表是有序、可重复且可变的数据类型,支持多种操作,如创建、拼接、索引、遍历以及增、删、查、改等。元组则为有序、可重复但不可变的数据类型,同样支持索引、遍历,但不支持修改元素。此外,文章还提到了列表的堆栈、计数、反转、排序、深浅拷贝等高级特性,以及元组的max()和min()函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.列表

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

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

1、特点

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

2、创建

  • 创建空列表

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

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

3、拼接

li1=li2+li3

4、重复

print(li1*3)

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

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)
      #[]
      
    • 索引
    • 切片

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 

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"]
li2 = ["c","d","e","f"]

tmp = [val for val in li1 if val in li2]
print(tmp)
#结果为:['c', 'd']
  • 赋值与深浅拷贝

    • 赋值是对对象的引用
    la = [1,2,5,6,'a',['f','g','n','b']]
    lb = la
    print(lb)
    print(la is lb)
    print(id(la),id(lb))
    la.append('fgsb')
    print(la)
    print(lb)	
    #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b']]
    #True
    #54365640 54365640
    #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b'], 'fgsb']
    #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b'], 'fgsb']
    
    • 深浅拷贝

      • 浅拷贝会创建新的对象,内容是原对象的引用,对于元素地址的拷贝只有第一层,当列表中的元素也存在列表时,即该列表的元素的地址就不知有一层了,当你修改第一层中的元素时,拷贝列表会跟随变化;当你修改到第二层中元素时,由于拷贝列表只拷贝了第一层,第二层元素改变时,拷贝列表不会改变

      切片操作[:]

      工厂函数list(li)

      copy函数

      la = [1,2,5,6,'a',['f','g','n','b']]
      lb = la.copy()
      print(lb)
      print(la is lb)
      print(id(la),id(lb))
      la.append('fgsb')
      print(la)
      print(lb)
      #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b']]
      #False
      #54300224 54858136
      #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b'], 'fgsb']
      #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b']]
      
      • 强拷贝
      import copy
      la = [1,2,5,6,'a',['f','g','n','b']]
      lb = la
      lc = copy.deepcopy(la)
      print(lb)
      print(lc)
      print(la is lb)
      print(la is lc)
      print(id(la),id(lb),id(lc))
      la[5][2]='s'
      print(la)
      print(lb)
      print(lc)
      #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b']]
      #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b']]
      #True
      #False
      #52106744 52106744 52105944
      #[1, 2, 5, 6, 'a', ['f', 'g', 's', 'b']]
      #[1, 2, 5, 6, 'a', ['f', 'g', 's', 'b']]
      #[1, 2, 5, 6, 'a', ['f', 'g', 'n', 'b']]
      
      • 列表解析式

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

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

        最后计算的表达式以一个列表返回

      • 三目运算符

      y = 10
      x = y + 1 if y>10 else y-1
      print(x)
      x = y + 1 if y>9 else y-1
      print(x)
      #9
      #11
      

2、元组

1、特点

  • 有序
  • 可重复
  • 不可更改

2、元组的创建

  • 空元组的创建
  • 单元素元组的创建
tp = ()
tp1 = ("abc")
tp2 = ("abc",)
print(type(tp))
print(type(tp1))
print(type(tp2))
#<class 'tuple'>
#<class 'str'>
#<class 'tuple'>
  • 多元素元组创建,可包含多种数据类型

3、拼接

4、重复

5、索引(偏移) 切片

tp = ("def",)
tp2 = ("abc","zucc")
tp1 = tp + tp2 #拼接
print(tp1)
print(tp*3)   #重复
print(tp1[0])
print(tp1[0][1])
print(tp1[1:])
print(tp1[::-1])
#('def', 'abc', 'zucc')
#('def', 'def', 'def')
#def
#e
#('abc', 'zucc')
#('zucc', 'abc', 'def')
  • index()函数可用于获取指定元素第一次出现的下标值

6、删除

不能删除某个元素,但可以删除整个元组,用del函数

7、最大最小值

max()、min()函数可获得元组中最大和最小的元素

8、遍历

  • 元素遍历
  • 索引遍历
  • 枚举

大致与列表操作相同,差别不大,可向上参考

tp1 = ("def",)
tp2 = ("abc","zucc")
tp = tp1 + tp2
for i in tp1:
	print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值