python之_常用数据结构

python常用数据结构:

1)列表

2)元组

3)集合

4)字典

列表的定义:

python中可以通过组合一些值得到多种复合型数据类型。列表是最常用的数据结构。列表通过方括号起、逗号分隔的一组值得到。一个列表可以包含不同类型的元素,但通常使用时各个元素类型相同

列表的特性(列表中定义的方法):

1)list.append(x):在列表的末尾添加一个元素。相当于a[len(a):]=[x] 

2)list.insert(i,x):在给定的位置插入一个元素。第一个参数是要插入的元素的索引,以a.insert(0,x)插入列表头部,a.insert(len(a),x)等同于a.append(x)

3)list.remove(x):移除列表中第一个值为x的元素。如果没有这样的元素,则抛出ValueErro异常。代码示例:

a=["h","o",'n']
try:
    a.remove("oo")
    print(a)
except:
    print("有异常")

4)list.pop([i]):删除列表中给定位置(index)的元素并返回它。如果没有给定位置(但不能超出列表的长度),a.pop()将会删除并返回列表中最后一个元素。代码示例:

#删除下标为1的元素:“o"
a=["h","o",'n']
a.pop(1)
print(a)
#删除最后一个元素(下标为-1):“n"
a=["h","o",'n']
a.pop()
print(a)
#下标超出长度,会报错
a=["h","o",'n']
a.pop(3)
print(a)

5)list.sort(key=None,reverse=False):对列表中的元素进行排序(参数可用于自定义排序,解是请参见sorted())。key 可指定一些规则,reverse 默认值是False,可以给它赋值成True,那就是反向排序,可以自定义key函数排序)。自定义key代码示例如下:

#自定义key规则实现反转(对应的元素平方作比较决定元素的位置)
a=[-2,1,5]
def f(x):
    return x*x

a.sort(key=f)
print(a)

6)list.reverse():反转列表中的元素

a=[3,1,5]
a.reverse()
print(a)

7)list.clear():删除列表中所有的元素。相当于 del a[:]。代码示例:

a=[1,2,3,5]
a.clear()
print(a)

8)list.extend(iteable):使用可迭代对象中的所有元素来扩展列表。相当于a[len(a):]=iterable。代码示例:

a=[1,2,3,5]
iterable=[7,8,9]
a.extend(iterable)
print(a)

输出结果为:

D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py
[1, 2, 3, 5, 7, 8, 9]

Process finished with exit code 0

重点注意,这和a.append不同,a,append是会将整个iterable当作一个整体,作为一个元素放到a列表中。代码示例和结果输出如下:

a=[1,2,3,5]
iterable=[7,8,9]
a.append(iterable)
print(a)

结果:

D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py
[1, 2, 3, 5, [7, 8, 9]]

Process finished with exit code 0

9)list.index(x,start,end]):返回列表第一个值为x的元素的从零开始的索引。如果没有这样的元素,将抛出valueerror异常。代码示例如下:

a=[1,2,3,5]
print(a.index(2, 0, 3))

结果将是1(2对应的列表中的下标是1),有返回值且返回值为对应的下标

10)list.count(x):返回元素x在列表中出现的次数。代码示例如下:

a=[1,2,1,3,1,1,1,5,[1,1,2,1]]
print(a.count(1))

结果:

D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py
5

Process finished with exit code 0

11)list.copy():返回列表的一个浅拷贝,相当于a[:]。代码示例:

a=[1,2,1,3,1,1,1,5,[1,1,2,1]]
print(a.copy())

结果:

D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py
[1, 2, 1, 3, 1, 1, 1, 5, [1, 1, 2, 1]]

Process finished with exit code 0

总结注意:

insert、remove或者sort方法,之修改列表,没有返回值(他们的返回值都是None)。这是python中所有可变数据结构的设计原则。并非所有数据或可以排序或比较(字符串和数字等)

 

列表推导式:

列表推导式提供了一个更简单的创建列表的方法。常见的用法是将某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某种特定条件元素来创建子序列

练习:如果我们想生成一个平方列表,比如[1,4,9...],使用for循环应该怎么写,使用列表生成应该怎么写?代码示例:

#生成一个平方列表,比如[1,4,9...],for循环实现
l=[]
for i in range(1,10):
    l.append(i*i)
print(l)
#生成一个平方列表,比如[1,4,9...],列表推导式实现
l=[i*i for i in range(1,10)]
print(l)
#生成一个平方列表,比如[1,4,9...],列表推导式实现。
#列表里面除了放for循环,也可以带上if判断语句,还可以放嵌套循环
#等同于两层for循环。外层循环i,内层循环j
l=[i*j for i in range(1,10) for j in range(1,10) if i!=1] print(l)

------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------------------

元组:tuple是只可读,而不支持写的,所以,出现了关于tuple赋值的问题,就会出现问题。代码示例如下:

#元组
a=(1,2,3)
a[0]=5
print(a)

结果提示:TypeError: 'tuple' object does not support item assignment

如果元组中嵌套列表,元组中的列表的值是可以变的。代码示例如下:

#元组
b=[4,5,6]
a=(1,2,3,b)
#打印元组各元素内存地址
print(id(a[0]))
print(id(a[1]))
print(id(a[2]))
print(id(a[3]))
#打印第四个元素(列表)第一个值
print(a[3][0])
print(id(a[3][0]))
#将列表第一个值赋值,看看赋值是否可以。结果发现是可以的
a[3][0]="a"
print(a[3][0])
print(a)
#重新打印赋值后的地址,发现是不变的
print(id(a[3]))
print(id(a[3][0]))

元组常用特性(方法):

1)tuple.count():返回元组中某个元素出现的次数。代码示例如下:

a=(1,2,3,1)
print(a.count(1))

2)tuple.index(x):返回元组中x元素首次出现的位置的下标,若没有这个元素,则抛出异常。代码示例如下:

a=(1,2,"a",3,2,"a",1)
print(a.index("a"))

运行结果:2

a=(1,2,"a",3,2,"a",1)
try:
    print(a.index("b"))
except:
    print("抛出异常")

运行结果:抛出异常

---------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------

集合:集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。它可以使用{}或者set()函数创建集合。要创建一个空集合只能用set()而不能用{}

#集合
#定义一个集合,里面元素只有一个
a={1}
#定义一个空集合,必须用set(),不可以写成b={},因为这样写,python解释器会把它当作一个空字典
b=set()
#查看a和b的类型,都是集合
print(type(a))
print(type(b))
#查看a和b集合的长度,a长度是1,b长度是0
print(len(a))
print(len(b))

 ---------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------------------------------

字典:字典是以【关键字】为索引。关键字可以是任意不可变类型。通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以作为关键字

字典特性(常用方法):

1)dict.keys():返回字典的所有key值

2)dict.values():返回字典的所有values值

3)dict.pop("key"):返回要删除的key值,并将字典修改(修改后的字典为去掉删除的key值键值对剩余的值)

4)dict.fromkeys((tuple):"a"):定义字典,tuple的每个元素都是key值,且对应的键值都是"a"。代码示例:

m={}
m=m.fromkeys([1,2,3],"a")  #也可以是元组
print(m)

结果:{1: 'a', 2: 'a', 3: 'a'}

5)字典也可以有字典推导式。代码示例如下:

#字典推导式
y={i:i*i for i in range(1,10)}
print(y)

结果:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

posted @ 2021-03-14 00:56  Brynaaa_111  阅读(155)  评论(0)    收藏  举报