第六章 数据类型(列表和元组)

"""

第六章 数据类型(列表和元组)

"""

# 列表 list

# 一、列表的定义

# 需求:想存储一个人的名字

name1="tom"

name2="jerry"

name3="kate"

# 使用多个字符串存储多个名字问题:

# (1)变量名也是需要占用内容

# (2)需要查找第50个人的名字谁


# 列表:可以存储多个数据元素(计算机中对于可以存储多个数据元素的数据类型---集合类型)

# 列表的定义:列表名字=[元素,]

names=["tom","jerry","kate",1,3,[4,5]]

print(type(names),names)

names_null=[]

print(type(names_null),names_null)


print(len(names))

print(len(names_null))


print(bool(names),"当names中有元素时,转换成布尔型")

print(bool(names_null),"当names中有没有元素时,转换成布尔型")


# 应用

# if len(names_null)==0:

# if not names_null:

#

# if len(names_null) != 0:

# if  names_null:




# 列表的内存结构

# 列表的名字,列表对象,列表元素(字符串、数值、列表。。。)

"""

列表的相关特性:

(1)列表中的元素可以是多种类型

(2)列表的元素是有序

(3)列表是可变的数据类型,列表中的元素是可以修改的。

"""



#二、列表的相关操作

# 1. 运算符 +  *  in  not in   is  is not  ==  >  <=

# + 合并 列表的+新创建列表

# [1, 3, 4, 5]

a=[1,3]

b=[4,5]

print(a+b,a,b)  #千万注意不是:[[1,3],[4,5]]



#* 重复 新创建列表,将原列表中的元素进行重复

print(a*3,a)      #千万注意不是:[[1,3],[1,3],[1,3]]



# in  not in:元素是否存在在当前的列表中

# 列表的元素:数值、字符串、字节、列表。。。。

print(1 in a)

x="abc"  # 对于字符串来说, 字符串的元素仍然是字符串

print("a" in x)


names=["tom","jerry","kate",1,3,[4,5]]

print(4 in names)



# ==  is

# 列表作为可变的数据类型a和b不是同一个对象 is返回False  ==返回True

a=[1,3,4]

b=[1,3,4]

c=a

print(id(a),id(b),id(c))



# > < 按照元素逐个比较

print([1,2,3]<[2,3])

print([1,2,3]<[1,3])



# 2. 索引:获取单个元素

# 语法:列表名[index]

# index: 第一个元素从索引为0开始,正数:从左到右  负数:从右到左

# 索引不能越界  范围[-len(li),len(li)-1]

print(a[1])

print(a[-1])

# print(a[-100])

print(id(a[0]),id(b[0]))

x=1

print(id(x))


# 列表的元素是否可变

# s="abc"

# s[0]="6"


l=[1,2,3]

l[0]="6"

print(l)



#练习

# (1). 将下面列表在中tom和jerry元素位置对调

names=["tom","jerry","kate",1,3,[4,5]]

print(id(names))

names[0],names[1]=names[1],names[0]

print(names)

print(id(names))


# (2).新定义一个names_new,画出内存图。

names_new=["tom","jerry","kate",1,3,[4,5]]

print(id(names[5]),id(names_new[5]))

names_new2=names_new



# 3. 切片:获取列表中的多个元素:依然是列表

# 列表名[start:end]

# 包含start,不包含end

# start:正数、负数、0,start省略是0

# end:正数、负数、0,end省略是len(li)

# 默认情况下获取的时候,start在end的左侧

names=["tom","jerry","kate",1,3,[4,5]]

print(names[1:3])


# 字符串的索引获取的依然是单个字符串

s="hello"

# 列表的索引获取的是单个元素

l=[1,2,3]

print(s[0],l[0])


# 字符串的切片获取出来依然是字符串

# 列表的切片 获取出来依然是列表

print(s[1:3])

print(l[1:3])

print(l[-100:100])


# 使用列表切片进行对列表元素的修改。

# 注意:切片直接跟列表进行绑定,尽量不要跟单个元素进行绑定

# 如果单个元素属于序列类型,这时候,列表的切片能够自动将序列转换成列表的元素

# 如果单个元素不是序列类型(可迭代对象),这时候会出错。

l=[1,2,3]

# l[1:3]=["a","b","c"]

# l[1:3]="a"  # 不建议这样写

l[1:3]=["a"]  # 建议这样写

# l[1:3]=100 # 报错

print(l)


# l[1]=["a","b","c"]

# print(l)



# 三、列表中的相关方法

li=["a","b","c","d","e"]

# 1.  添加

# +合并:新创建列表进行合并

print(li+["z"],li)


#append对列表中的元素进行追加,追加到列表的尾部,原地修改

#print(li.append("z")) # 注意使用的时候,append的方法返回值是None

li.append("z")

print(li)


# replace字符的相关方法都不是原地修改,都是新创建字符串

# s="abc"

# print(s.replace("a","d"))

# print(s)


# insert插入元素,可以向列表中的index位置,插入object元素

# li.insert(index,object)

li=["a","b","c","d","e"]

li.insert(2,"z")

print(li)


# 练习:使用insert能不能达到append效果

# li.append("happy")

print(li)

# li.insert(0,"happy")

# print(li)

li.insert(len(li),"happy")

print(li)



# 2. 删除

# (1)pop

# li.pop(index)  可以删除index指定位置的元素,一次只能删除一个元素

# pop的返回值是删除元素的内容

# index如果省略,会默认删除列表中的最后一个元素

print(li.pop(1))

print(li)

li.pop()

print(li)

# li.pop(100) # 索引越界报错


# (2)remove:根据传入参数的内容删除指定元素,一次只能删一个,只删除第一次出现的元素

#  remove如果指定元素不存在,会报错

li.remove("c")

print(li)

# li.remove("new")

li=["a","b","c","d","e","a"]

li.remove("a")

print(li)


#3. 检索

# li.index(要检索的内容,起始位置,终止)

# 包含起始位置, 不包含终止

print(li.index("d"))

# print(li.index("dd")) #如果要检索的内容不存在,会报错


#4.统计

li=["a","b","c","d","e","a"]

print(li.count("a"))


#5.反向:原地反向

li.reverse()

print(li)


#6.排序sort: 原地排序

# 列表中的元素类型不一致,不能进行sort排序。

# reverse参数:默认升序False

# 降序reverse=True

li=["a","f","c","u","e","t"]

# li.sort()

# print(li)

li.sort(reverse=True)

print(li)


#降序可以通过先调用sort升序排序,再调用reverse反向


# print(3>"a")

# li=[3,"a"]

# li.sort()


# 7.列表的复制

#(1)赋值

#(2)copy方法

#(3)切片

#(4)copy包下的copy和deepcopy

#(5)*


# 使用赋值进行复制

li=[1,2,3,[4,5]]

li1=li

print(id(li),id(li1))

li[0]="new"

# n=li[3]

# n[0]="new"

li[3][0]="new"

print(li,li1)


# 使用列表的copy方法进行复制

# 只负责复制当前的列表对象(只复制第一层)

li=[1,2,3,[4,5]]

li2=li.copy()

print(id(li),id(li2))

li[0]="new"

li[3][0]="new"

print(li,li2)


"""

第六章  数据类型  元组 tuple

"""

# 元组:带了枷锁的列表

# 为了保证数据的安全性,出现了元组

# 元组在一定意义上跟列表类似,但是不能修改的列表

# 元组的元素不能进行修改


# 一、元组的创建

# 定义元组: 元组名=(元素,)

a=(1,2,3)

print(type(a),a)

b=1,2,3

print(type(b),b)


# 二、元组的操作

# 1. 运算符

# 跟列表一样 + * in  not in  is is not  ==  < >=

a=(1,2)

b=(3,4)

print(a+b,a,b)


print(a*3)

# 元素的合并和重复


print(1 in a)

print(1 in ((1,2),3,4))


# is  ==

a=(1,2,3)

b=(1,2,3)

c=a

print(id(a),id(b),id(c))


print((1,2,3)<(2,3))


# 2. 索引、切片

a=(1,2,3)

print(a[1])

print(a[1:3])

# a[1]="new"


# 如果元组中的元素是可变类型,对于可变类型中的元素是能修改

a=([1,2,3],4,5,6)

a[0][0]="new"

print(a)


# 三、相关方法

a=(1,2,3,1,1,1)

# 统计

print(a.count(1))

#返回元素的位置

print(a.index(1))

# print(a.index(10))  找不到会报错

你可能感兴趣的:(第六章 数据类型(列表和元组))