python基础数据类型二

第四章 python基础数据类型二

python常用数据类型之组合数据类型:列表,元组。

4.1 列表 list

列表介绍

列表是python的基础数据类型之⼀ ,其他编程语⾔言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以 [ ] 括起来, 每个元素⽤用' , '隔开而且可以存放各种数据类型,

常用定义方式一:

lst = [1, '李雷', "飞雪",Ture, [1,8,0,"百度"], ("我","叫", "元", "组"), "abc", {"我 叫":"dict字典"},{"我叫集合","集合"}]

li = [1,2,3,'123',True,[1,2,5]]   # 容器 任意类型都可以
列表 == 书包
    水杯
    衣服
    袜子
    钱包
        1,2,5

定义方式二

列表底层使用了for循环 "abc" 可迭代的字符串类型

li = list("abc")  
print(li)
['a', 'b', 'c']

列表对比子字符串:

列表能存储大量的数据,子字符串存储少量数据,可以存放⼤大量量的数据. 32位 python可以存放: 536870912个元素, 64位可以存放: 1152921504606846975个元素.⽽而且列列 表是有序的(按照你保存的顺序),有索引, 可以切⽚片⽅方便便取值.

4.2 列表的索引和切片

列表对比字符串一样有序的也拥有索引,切片,步长。

4.2.1 索引

li = [1,2,3,"123",True]
    # 0 1 2  3     4    #列表对于的元素索引值从0开始取值
print(lst[0])           # 获取第⼀个元素 1
print(lst[1])           # 获取第二个元素 2
print(lst[2])           # 获取第三个个元素 3

注意:列表取出的元素是什么类型就是什么类型

li = [1,2,3,'123',True]
print(li[3],type(li[3]))    #获取第三个元素类型字符串str
123 <class 'str'>
print(li[4],type(li[4]))
True <class 'bool'>         #获取第四个元素类型布尔值bool

4.2.2切片

列表的切片,使用索引值(下标)截取部分列表中元素的内容。

语法:list[star:end]

规则:顾头不顾尾,从start开始截取,截取到end位置,但是不包括end的元素。

默认从0开始截取

li = [1,2,3,"123",True]
    # 0 1 2   3      4      #从左边往右边切取(索引值)从0开始取(有序支持)
    # -5 -4 -3 -2   -1      #从右边往左边切取值(索引值)从-1开始取
print(li[:2])              #从0获取到2,不包含2 结果:[1, 2]
print(li[1:4])             #从1获取4,不包含4 结果:[2, 3, '123']
print(li[-1:])             #(取倒数第一个)从右边-1获取到0不包含0(对应方向为右边) 只取1个结果:True

4.2.3列表的步长

步长就是跳着取,跳几步取一次,控制取值的方向。

步长切片后还是原来的数据类型:

s = "alex"
print(type(s[1:3:1])) # 切片后还是原来的数据类型<class 'str'>
print(type(li[-1:-4:-1])) # <class 'list'>

步长: 如果是整数, 则从左往右取. 如果是负数. 则从右往左取. 默认是-1开始

切片语法:list[start: end:step] start: 起始位置 end: 结束位置 step:步⻓(步数)

li = [1,2,3,"123",True]
    # 0 1 2   3      4      
    # -5 -4 -3 -2   -1
print(li[-1:-4:1])   
#取-1到-4的值,不包含-4,方向向右,结果值[]需引入步长值改变取值方向。
li = [1,2,3,"123",True,[1,2,3,False],]
    # 0 1 2   3     4       5
    # -6 -5 -4 -3  -2       -1

print(li[-1:-4:-2])     #从-1开始到-4取值,左方向跳2步到-5结束不包含-5结果:[[1, 2, 3, False], '123']
                      #公式算法类似:起始+步长 -1+-2 = -3往右边(倒着)跳2步,-3+-2=-5

4.3 列表的增,删,改,查

4.3.1 列表的增

list列表是可变对象,所以直接在原来的对象上进行操作。

li = [1,2,3,"123",True]
li[2] = "注意"
print(li)
[1, 2, '注意', '123', True]

str字符串是不可变对象,所以任何操作对原字符串是不会有任何影响。

s = "123"
s[2] = "注意"
print(s)
#报错 TypeError: 'str' object does not support item assignment不允许改变

4.1.2 列表的增

append() 增加:

追加方式,默认添加在列表中元素的末尾。

错误写法:print(li.append('太亮')) 结果值:None

li = [1,2,3,'alex',3,[1,2,3]]
     #0,1,2,  3,    4, 5
li.append('太亮')          # 追加  添加在末尾  添加的操作
print(li)
[1, 2, 3, 'alex', 3, [1, 2, 3], '太亮']

insert() 插入

需要指定元素插入的位置(索引值),原来的元素向后移动一位,所以执行效率低(依次插入空间内存地址)

语法: insert(seat,content)

li = [1,2,3,'alex',3,[1,2,3]]
li.insert(0,"太亮")   #插入第一个参数(索引),第二参数要插入的内容(效率特别低)
print(li)
['太亮', 1, 2, 3, 'alex', 3, [1, 2, 3]]

extend() 迭代添加

extend()迭代添加底层原理类似for循环,依次将字符串的内容拆分成每个元素次往后循环添加到列表。

li = [1,2,3]            # 扩展 -- 迭代添加  -- for
li.extend("abc")
print(li)
[1, 2, 3, 'a', 'b', 'c']

迭代添加实现的原理;

li = [1,2,3]
for i in "abc":    #迭代添加开始
    li.append(i)    #迭代添加结束
print(li)
[1, 2, 3, 'a', 'b', 'c']

整型int,布尔bool对象不能被迭代

li = [1,2,3]        
li.extend(123)
print(li)
#报错TypeError: 'int' object is not iterable

列表合并

l1 = [1, 2, 3]
l2 = ["a","b","c"]
print(l1+l2)
[1, 2, 3, 'a', 'b', 'c']

4.1.3 列表的删除

pop() 列表删除中唯独pop删除过程有返回值,返回的是被删除的内容,默认是删除在末尾元素。

语法:pop(index) 括号内指定被删除的索引(下标)。

li = [1,2,3,"abc",True]
li.pop(3)
print(li)

abc             # 被删除的内容
[1, 2, 3, True]   #删除后的结果

remove() 指定删除的元素名字进行删除,如果元素名字不存在就会报错。

li = [1,2,3,"abc",True]
li.remove(1)
print(li)

del 删除

标记删除,清除内存不用的资源,释放空间。

del是python的关键字,底层原理会计算所有元素出现的次数,在内存中进行分成统计,自动释放空间

li = [1,2,3,"abc",True]
del li #del li 将整个容器都删掉
print(li)

del 支持索引,切片步长删除

li = [1,2,3,"abc",True]
del li[2]               #del支持索引删除
del li[0:3]             #del支持切片删除
del li[::2]             #del支持步长删除
print(li)

clear() 清空

li = [1,2,3,"abc",True]
li.clear()                      #清空列表结果:[]
print(li)

4.1.4 列表的修改

列表元素索引,切片,步长的修改。

列表的索引

li = ["水杯",2,3,"abc",]
li[1] = "奶瓶"                把二号元素替换成奶瓶
print(li)
['水杯', '奶瓶', 3, 'abc']

列表的切片

li = ["水杯",2,3,"abc",]
i[1:3] = [1,2,3]   #在1到3范围添加列表[1,2,3],1-3区间会展开放
print(li)
['水杯', 1, 2, 3, 'abc']
li = ["水杯",2,3,"abc",]
li[1:3] = "abcd"
print(li)
['水杯', 'a', 'b', 'c', 'd', 'abc']
li = ["水杯",2,3,"abc",]
l2 = [1,2,3,4,66,7]

li[1:3] = l2[4:]       #l2[4:]从索引值4后面取出来的类型是列表[66,7]类型,迭代进去,可多可少。
print(li)
['水杯', 66, 7, 'abc']
li = ["水杯",2,3,"abc",]
li[1:2] = []      #从1-2范围全部变成空,不包含2
print(li)
['水杯', 3, 'abc']

题一:

li = [1,2,3,4,"abc",5]
li[0:2] = "ABCsadfsdf"    #li[0:2]出的结果[3,4,"abc",5]被"ABCsadfsdf"迭代添加
print(li)
['A', 'B', 'C', 's', 'a', 'd', 'f', 's', 'd', 'f', 3, 4, 'abc', 5]

步长:

截取几个元素就放入几个元素

li = ["水杯",2,3,"abc",]
li[0:3:2] = "abcabc" #报错不明确区间,迭代的位置无法查找
print(li)

li = ["水杯",2,3,"abc",]
li[0:3:2] = [1,2,3],[1234]     #截取几个元素就放入几个元素
print(li)
[[1, 2, 3], 2, [1234], 'abc']

4.1.5 列表的查讯

列表是一个可迭代对象,可以进行for循环查

#for循环
li = ["水杯",2,3,"abc",]
for em in li:
    print(em)

一般查询

li = [1,2,3,4]
print(li)
print(li[1])

列表的其他操作:统计,排序,反转,长度

lst = ["太⽩", "太⿊",  "太⽩"] 
c = lst.count("太⽩")                 # 查询太⽩出现的次数 
print(c) 

lst = [1, 11, 22, 2] 
lst.sort()                              # 排序. 默认升序 
print(lst) l
st.sort(reverse=True)                   # 降序 
print(lst)


lst = ["太⽩白", "太⿊黑", "五⾊色", "银王", "⽇日天", "太⽩白"] 
print(lst) 
lst.reverse() 
print(lst)

l = len(lst)                             # 列列表的⻓长度 
print(l)

4.3.6 列表的嵌套

采用降维度操作,一层一层的看就好

lst = [1, "小白", "lisir", ["码农", ["可乐"], "王林林"]]
print(lst[2])                       # 找到lisir
print(lst[1:3])                     #找到'小白', 'lisir'
print(lst[1][1])                     #找到小白中的白

lst = [1, "小白", "lisir", ["码农", ["可乐"], "王林林"]] 将lisir拿到. 然后⾸首字⺟母⼤大写. 再扔回去

lst = [1, "小白", "lisir", ["马疼", ["可乐"], "王林林"]]#将lisir拿到. 然后⾸首字⺟母⼤大写. 再扔回去
s = lst[2]          #将lisir拿到
s = s.capitalize()   #⾸首字⺟母⼤大写
lst[2] = s
print(lst)

简单写法:

lst = [1, "小白", "lisir", ["码农", ["可乐"], "王林林"]]
lst[2] = lst[2].capitalize()
print(lst)

把小白变成小黑

lst = [1, "小白", "lisir", ["码农", ["可乐"], "王林林"]]
lst[1]= lst[1].replace("白", "黑")
print(lst)

把码农换成码云

lst = [1, "小白", "lisir", ["码农", ["可乐"], "王林林"]]
lst[3][0] = lst[3][0].replace("农", "云")
print(lst[3][0])

添加雪碧到列表

lst[3][1].append("雪碧")
print(lst)

4.3 元组tuple

元组: 俗称不可变的列列表.⼜又被成为只读列列表, 元组也是python的基本数据类型之⼀一, ⽤用⼩小括 号括起来, ⾥里里⾯面可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 可以存一些任意类型的数据,但就是不能 改。存储一些不能修改的数据。

tu = (1) 括号中没有用逗号隔开就是元素本身不是元组。

tu = (1,) 小括号中的一个元素用逗号隔开的就是元组

tu = () 空的小括好就是元组

元组是有序的,索引,切片,步长,是不可变的数据类型

一般应用在配置文件程序中,为了防止误操作修改一些数据

4.3.1元组的查询

tu = (1, 2, 3, "lisir", 6)
print(tu)
print(tu[1])            #索引
print(tu[1:1000])       #切片 返回的是切片前的数据类型
print(tu[::2])          #步长

元组的for循环

tu = (1, 2, 3, "lisir", 6)
# for循环遍历元组
for el in tu:
    print(el)

关于不可变, 注意: 这⾥里里元组的不可变的意思是⼦子元素不可变. ⽽而⼦子元素内部的⼦子元素是可 以变, 这取决于⼦子元素是否是可变对象

元素里面操作列表元素可以添加到元组的列表元素内

tu = (1, 2, [],3, "lisir", 6)
tu[2].append("hehe")     # 可以改了了. 没报错
tu[2].append("你好")
print(tu)

元组也有count(), index(), len()

4.3.2 元组嵌套

tu = (1,2,3,(4,5,6,[6,7,8,(9,11,10),"abc"],"ABC"))
print(tu[3][3][3][1])  # [6,7,8,(9,11,10),"abc"]
print(tu[-1][-2][-1])

猜你喜欢

转载自www.cnblogs.com/yueling314/p/10994401.html