python 常见数据结构

大纲

  • 列表
  • 元组
  • 集合
  • 字典

列表

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

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

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

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

list.pop([i]): 删除列表中给定位置的元素并返回它。如果没有指定位置,a.pop将会删除并返回列表中的最后一个元素、

list.sort(key=None, reverse=Flase): 对列表中的元素进行排序(参数可用于自定义排序,解释请参见 sorted()).

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

示例:

list_hogwarts=[1,2,3,5,7,4]
list_hogwarts.append(0)
#list_hogwarts.insert(0,9)
#list_hogwarts.remove(1)
y = list_hogwarts.pop(0)
print(y)
print(list_hogwarts)
list_hogwarts.sort(reverse=True) # True升序 Flase降序
print(list_hogwarts)

list_hogwarts.reverse() # 反转
print(list_hogwarts)

列表的特性
list.clear() 删除列表中所有的元素。相当于del a[:].

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

list.index(x[,start[,end]])

返回列表中第一个值为x的元素的从来零开始的索引。如果没有这样的元素将会抛出ValueError异常

可选参数start和end是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是start参数

list.count(x): 返回元素x在列表中出现的次数

list.copy(): 返回列表的一个浅拷贝,相当于a[:]

注意:
insert, remove 或者sort方法,只修改列表,没有打印出返回值—它们返回默认值None,这是python中所有可变数据结构的设计原则
并非所有数据或可以排序或比较(字符串和数字等)

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

练习:如果我们想生成一个平方列表,比如[1,4,5,…],使用for循环应该怎么写,使用列表生成式又应该怎么写呢?

list_square=[]
for i in range(4):
    list_square.append(i**2)

print(list_square)

list_square2=[ i**2 for i in range(1,4)]
print("list_square2",list_square2)
list_square3=[]
for i in range(1,4):
    if i!=1:
        list_square3.apped(i**2)
print(list_square3)


list_square3=[i**2 for i in range(1,4) if i!=1]
list_square4=[]
for i in range(1,4):
    for j in range(1,4):
        list_square4.append(i*j)


list_square4=[i*j for i in range(1,4) for j in range(1,4)]
print(list_square4)

元组
元组使用()进行定义
tuple,list,range都是序列数据类型
元组是不可变的,可以通过解包,索引来访问

#元组定义
tuple_hogwarts = (1,2,3)
tuple_hogwarts2 = 1,2,3

print("tuple_hogwarts",tuple_hogwarts)
print(type(tuple_hogwarts))

print("tuple_hogwarts2",tuple_hogwarts2)
print(type(tuple_hogwarts2))

元组的不可变特性

list_hogwarts = [1,2,3]
list_hogwarts[0] = "a"
print(list_hogwarts)

tuple_hogwarts = (1,2,3)
tuple_hogwarts[0] = "a"   # 会报错元组,不可修改
tuple_hogwarts = (1,2,a)
print(id(tuple_hogwarts[2]))
tuple_hogwarts[2][0] = "a"  # 嵌套可以修改 
print(id(tuple_hogwarts[2]))
print(tuple_hogwarts) 
a= (1,2,3,"a","a")
print(a.count("a")) # 统计元素出现次数
print(a.index(3)) # 求对应元素的索引

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

a = {1}
b = set()
print(len(b))

print(type(a))
print(type(b))
a = {1,2,3}
b = {1,4,5}

print(a.union(b))
print(a.intersection(b))
print(a.difference(b))

a.add("a")
print(a)
print({i for i in "asdasdafafasfasf"})

c = "dasdasdasdasd"
print(set(c))

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

hogwarts_dict = {"a":1,"b":2}
hogwarts_dict2 = dict(a=1,b=2)
print(" hogwarts_dict", hogwarts_dict)
print(type(hogwarts_dict))
print(" hogwarts_dict2", hogwarts_dict2)
print(type(hogwarts_dict2))
a = {"a":1,"b":2}
b = dict(a=1,b=2)

print(a.keys())
print(a.values())

print(a.pop("a"))
print(a)

print(a.popitem()) # 随机删除键值对
print(a)
a={}
a.fromkeys((1,2,3),"a")
print(b)


print({i : i*2 for i in range(1,3)})
上一篇:复习-数据类型


下一篇:Python程序设计——元组1