Python的列表和元组

1 列表(list)

​ 列表是Python内置的一种数据类型, 它是一种有序的集合, 可以随时添加和删除其中的元素。

1.1 列表的特点
  • 列表具有索引概念, 可以通过索引(索引从0开始)来访问list中的每一个位置的元素,当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,最后一个元素的索引是len(list) - 1

  • 列表是一个可变的有序表, 可以对列表进行数据的删除、修改、增加、查询操作。

  • 列表中的数据可以是不同的数据类型;

    说明: 小技巧 list_name[-1]:取列表的最后一个元素, list_name[-2]:取列表的倒数第二个值, list_name[-3]:取列表的倒数第三个值;

1.2 列表的操作
  • 创建/查询/修改:

    list_name = [数据项1, 数据项2, 数据项3...] # 创建
    list_name[index] # 通过索引获取列表的值, 注意索引的index的范围
    list_name[index] = new_value # 修改列表的值
    
    #eg
    lList = [1,2,3, [2,'34'],(1,23)]
    
  • 列表中常用的函数

    函数名说明实例
    len()h获取列表中数据的个数len(lList)
    append(data)向列表后面添加data数据lList.append('test')
    insert(idx, data)将data数据添加到索引为idxlList.insert(0, {"a":1})
    extend(model)_将数据存储模型model(列表所有的元素、元组中所有元素、集合所有的值、字典的key值)添加列表的后面lList.extend({'b':2})# 只添加字典的键b到列表末尾
    remove(data)删除列表中第一个data值, 如果data不存在将报错, 无返回值lList.remove(2)
    pop(idx)从列表中删除指定索引idx上的数据,并返回, 如果不指定idx, 则删除的是最后一个元素;lList.pop(2)
    clear()清空列表中的数据lList.clear()
    index(data)查询数据data在列表中的idx索引值lList.index(2)
    count(data)统计数据data在列表中出现的次数, 返回出现的次数lList.count(2)

2. 元组(tuple)

· 元组(tuple)也是python内置的一种数据类型, 它是不可修改的有序列表, 元组一旦初始化就不能修改。

2.1 元组的操作
  • 创建/查询元组
classmates = ('Michael', 'Bob', 'Tracy') # 元组中有多个元素
t = (1, ) # 定义元组中只有一个元素, 必须有逗号","来消除歧义(因为括号“()”既可以表示元组, 又可以表示数学公式中的小括号, 这就产生了歧义); 
t = () # 定义一个空元组
t = ('a', 'b', ['A', 'B']) # 元组中的元素数据类型可以不同

t[0] # 	取到到元组的第一个元素
t[t.length-1] # 取到元组的最后一个元素
t[-1] # 取到元组的最后一个元素
t[-2] # 取到倒数第二个元素

​ 由于元组一旦初始化就不能修改, 所以不能对元组进行增(append()、insert()等)、删(remove())、修改等操作, 但还是可以进行查询相关操作;

​ 元组可以通过索引idx取到对应位置上的值, 但要注意索引不要超出范围, 否则会抛出异常。

  • 元组的其它操作

    函数名说明实例
    len(t)获取元组的长度len(t)
    t.index(data)查询数据data, 在元组中的第一个位置的索引值t.index(data)
    t.count(data)查询数据data,在元组t中出现的次数t.count(data)
  • 元组的自动组包和自动拆(解)包

    • 自动组包: 将多个数据赋值给一个变量时, 多个数据将包装成一个元组后再将元组赋值给变量, 该过程称为自动组包;

      应用场景:

      • 设置返回值为多个值

        return	1,2,3 	#等同于 return	(1,2,3)
        
      • 动态字符串赋值传值方式

        print(“坐标%d,%d” % (10,20))
        
    • 自动拆(解)包: 将元组赋值给多个变量时, 如果元组数据的数量与变量的数量相同, 元组将被自动拆分成多个值, 并赋值给对应变量, 该过程成为自动解包。

      应用场景:

      • 多个变量接收返回值

        a,b,c = func(return 1,2,3)  # 等同于 a,b,c = (1,2,3)等同于a,b,c = 1,2,3
        
      • 动态字符串取值的方式

        print(“坐标%d,%d” % (10,20))	#将10给第一个%d,将20给第二个%d
        
2.2 元组的特点
  • 元组也具有索引的概念, 可以通过索引查询到元组中的数据。
  • 元组中的数据一旦初始化了就不能进行修改(添加、删除、修改)操作, 只能进行查询;
  • 元组中定义的元素是不可变(元素的指向, 而不是值)
    • 元组中的数据如果是非引用类型数据, 不允许修改

    • 元组中的数据如果是引用类型对象(列表、字典), 该对象不允许替换(地址的引用不能改变), 对象的属性可变。

      >>> t = ('a', 'b', ['A', 'B'])
      >>> t[2][0] = 'X'
      >>> t[2][1] = 'Y'
      >>> t
      ('a', 'b', ['X', 'Y'])
      

      表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

  • 元组中的元素可以是不同的类型;

**不可变的tuple有什么意义? **

因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

3. 列表和元组的相互转换

l = [1,2,3,4]
# 列表转换为元组
t = tuple(l)
# 元组转换为列表
l2 = list(t)  

说明: 后面我将逐渐将我的blog转移到我的个人网站 http://www.kendny.cn, 欢迎关注并评论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值