Python列表和元组

本文详细介绍了Python中的列表和元组,包括它们的创建、操作和常见用途。列表支持增删改查,可以通过append、extend、insert等方法操作;元组是不可变的有序集合,可以进行索引和切片操作。文章还涵盖了列表的排序、计数、反转等高级操作,以及列表和元组的交集、深浅拷贝、列表解析式和三目运算符等内容。

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

列表

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

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

创建

创建空列表

>>> li = []
>>> print(type(li))
<class 'list'>

创建多元素列表

li = [1, 2, 3, 'abcd', 'city', 'collage', ["I", 'love', 'you']]
print(li, type(li))

[1, 2, 3, 'abcd', 'city', 'collage', ['I', 'love', 'you']] <class 'list'>

强转

sr = 'abcd'
li = list(sr)
print(li, type(li))

['a', 'b', 'c', 'd'] <class 'list'>

(1)拼接

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

['I', 'love', 'you']

(2)重复

li1 = ['I']
li2 = ["love", 'you']
print(li2*3)

['love', 'you', 'love', 'you', 'love', 'you']

(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)

4435955592
['City', 'College', ['a', 'b', 'c']] 4435955592
[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)

####改

li = ['City', 'College', 'a', 'b', 'c']
li[4]='6666'
print(li)

####删

  • pop() 通过下标删除

如果不指定索引,默认删除最后一个元素

删除指定索引对应的元素

li = ['a','b','c','d','e']
li.pop(2)
print(li)

['a', 'b', 'd', 'e']
  • remove() 删除第一次遇到的指定元素
li = ['a', 'b', 'c', 'd', 'e','f','e']
li.remove('e')
print(li)

['a', 'b', 'c', 'd', 'f', 'e']
  • del 删除列表释放空间
li = ['a', 'b', 'c', 'd', 'e','f','e']
del li[5]
print(li)

['a', 'b', 'c', 'd', 'e', 'e']

li = ['a', 'b', 'c', 'd', 'e','f','e']
del li
print(li)

报错
  • clear()清空列表里所有元素
li = ['a', 'b', 'c', 'd', 'e','f','e']
li.clear()
print(li)

[]
  • 遍历

(1)元素遍历

li = ['a', 'b', 'c']
for i in li:
    print(i)
    
    
a
b
c

(2)索引遍历

li = ['a','b','c']
for i in range(len(li)):
    print(li[i])
    
    
a
b
c

(3)枚举遍历

enumerate(). 对于一个可迭代的/可遍历的对象(如列表,字符串等)

将其组成一个索引序列,利用它,我们可以同时获得索引和值

li = ['a', 'b', 'c']
for i in enumerate(li, 2):
    print(i)
    
(2, 'a')
(3, 'b')
(4, 'c')
li = ['a', 'b', 'c']
for index,value in enumerate(li[:3],2):
    print(index,value)
    
    
2 a
3 b
4 c
tp = ('a', 'b', 'c')
for index, value in enumerate(tp[:3], 4):
    print(index, value)
    
    
4 a
5 b
6 c
其他操作

#####计数

  • count() 查找元素出现的次数

#####反转

  • reverse() 将列表元素取反

    li = list('abcd')
    print(li)
    li.reverse()
    print(li)
    
    
    ['a', 'b', 'c', 'd']
    ['d', 'c', 'b', 'a']
    
排序
  • sort()
    • sort(reverse=True) 将列表元素值进行降序排序
    • sort(reverse=False) 将列表元素进行升序排序
li = [4, 2, 5, 9, 1]
li.sort(reverse=True)
print(li)
li.sort(reverse=False)
print(li)

[9, 5, 4, 2, 1]
[1, 2, 4, 5, 9]
  • 小练习

    • li1 = [‘a’, ‘b’, ‘c’, ‘d’]
      li2 = [‘c’, ‘d’, ‘e’, ‘f’]

    ​ 输出两个列表的交集

    • 1.input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表。

      li = []
      while True:
          a = input('请输入元素:')
          if a == 'q':
              break
          else:
              li.append(a)
      print(li)
      
      
      请输入元素:asd
      请输入元素:qwe
      请输入元素:q
      ['asd', 'qwe']
      
    • 2.随机生成30个0-10的随机整数,并统计每个数出现的次数,
      返回的结果形式为[[0, 3], [1, 4], … , [10, 5]]

      li = []
      a = []
      import random
      
      for i in range(30):
          a.append(random.randint(0, 10)) #randint两边都是可以取到的
      print(a)
      sum = 0
      for i in range(0, 10):
          li.append([i, a.count(i)])
          sum += a.count(i)
      print(li)
      print(sum)
      
      
      [7, 7, 4, 8, 0, 2, 6, 7, 1, 3, 6, 9, 1, 0, 5, 7, 6, 4, 5, 8, 5, 7, 9, 1, 2, 9, 10, 9, 3, 1]
      [[0, 2], [1, 4], [2, 2], [3, 2], [4, 2], [5, 3], [6, 3], [7, 5], [8, 2], [9, 4]]
      29
      

      赋值于深浅拷贝

      赋值

      赋值是对对象的引用

      la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
      lb = la
      print(la)
      print(lb)
      print(id(la),id(lb))
      print(la is lb)
      
      la[5]= 'aaa'
      print(la)
      print(lb)
      print(id(la),id(lb))
      
      
      [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
      [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
      4509876168 4509876168
      True
      [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
      [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
      4509876168 4509876168
      
      深浅拷贝

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

      三种实现方法:

      • 切片操作[:]

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

      • copy模拟内的copy函数

        la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
        import copy
        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']]
        
        la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
        import copy
        lb_copy = copy.copy(la)
        print(id(la),id(lb_copy))
        la.append('test') #添加原子类型,不会影响lb_copy
        print(la)
        print(lb_copy)
        
        
        4490620872 4492049096
        [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test']
        [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
        

        深拷贝

        import copy
        
        la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
        lb_deepcopy = copy.deepcopy(la)
        print(la, id(la))
        print(lb_deepcopy, id(lb_deepcopy))
        
        la[6][1] = 'aaa'
        print(la)
        print(lb_deepcopy)
        
        
        [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 4501035080
        [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 4501033864
        [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']]
        [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
        

        对象的引用

        • 浅拷贝相当于我们只拷贝里一层,修改外层元素,会修改引用,让它们指向另一个位置

        • 修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置

      • 深拷贝拷贝对象的所有元素,包括多层嵌套的元素

      • 因此,是开辟里一个新的内存储存区,和数据源没有关系了

​ 列表解析式

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

print([x for x in range(10)])
print([x for x in range(10) if x%2==0])


[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]

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

sr = '城市学院'
print([ord(x) for x in sr])

[22478, 24066, 23398, 38498]

格式:

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

实现原理:

迭代[可迭代对象]中的每一个元素

每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值

最后所有通过表达式计算的值以一个列表的形式返回

三目运算符
y =12
x = y+1 if y>10 else y-1
print(x)


13

带过滤功能格式

[exp for iter_val in iter if if_condtion]
li =[]
for iter_val in iter:
    if if_condtion:
        li.append(iter_val)
print(li)
name = ['Tom', 'jack', 'lucy']
subject = ['python', 'java', 'c', 'c++']
li = []
for i in name:
    for j in subject:
        li.append([i, j])
print(li)

[['Tom', 'python'], ['Tom', 'java'], ['Tom', 'c'], ['Tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java'], ['lucy', 'c'], ['lucy', 'c++']]
name = ['Tom', 'jack', 'lucy']
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++'], ['lucy', 'python'], ['lucy', 'java'], ['lucy', 'c'], ['lucy', 'c++']]

元组

有序

可以重复的

不可以更改的

符号使用()

元组的创建

空元组的创建

不能添加元素

tp =()
print(type(tp))

<class 'tuple'>

单元组的创建

需要在单元素后面添加逗号

tp =(1,)
print(type(tp))

<class 'tuple'>

多元素元组的创建

包含多种数据类型

(1)拼接

a = ('I',)
b = ('love', 'learning')
c = a + b
print(c)

('I', 'love', 'learning')

(2)重复

a = ('I',)
b = ('love', 'learning')
c = a * 3
print(c)

('I', 'I', 'I')

(3)索引(偏移)

(4)切片

索引查

切片查

index()

tp = ('1', '2', '3', '4', '5', 'a', 'b', 'c', ('d', 'e', 'f'))
print(tp.index('a'))
print(tp[8].index('d'))

5
0

不可增

不能删除某个元素,但可以全部删除

del

tp = ('1', '2', '3', '4', '5', 'a', 'b', 'c', ('d', 'e', 'f'))
del tp
print(tp)
其他操作
tp = ('1', '2', '3', '4', '5', 'a', 'b', 'c', ('d', 'e', 'f'))
print('1' in tp)

True
  • 最大值和最小值

    tp1 = (4,7,3,8,2)
    print(max(tp1),min(tp1))
    
    8 2
    
  • 遍历

    • 元素遍历

      tp = ('a', 'b', 'c')
      for i in tp:
          print(i)
          
      a
      b
      c
      
    • 索引遍历

      tp = ('a', 'b', 'c')
      for i in range(len(tp)):
          print(tp[i])
          
      a
      b
      c
      
    • 枚举enumerate

    tp = ('a', 'b', 'c')
    for i in enumerate(tp, 2):
        print(i)
        
        
    (2, 'a')
    (3, 'b')
    (4, 'c')
    

嵌套

tp = (((1,2,3),(4,5,6),(7,8,9)),((11,12,13),(14,15,16),(17,18,19)))
print(tp[1][1])

(14, 15, 16)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值