集合
集合是多个元素的无序组合
集合元素之间无序
集合由不可变数据类型元素组成,如整数、浮点数、复数,字符串、元组类型等
集合用大括号{}组成,元素之间用逗号隔开
每个元素唯一,不存在相同元素
一、集合间操作
并(S|T )
S-T
S&T
S^T 返回一个新集合,包括集合S和T中的非相同元素
S<=T或S<T
S>=T或S>T
集合处理方法
S.add(x)
S.discard(x)
S.remove(x)
S.clear()
S.pop()
S.copy()
len(S)
x in S
x not in S
set(x) 将其他类型的元素转变为集合类型
集合类型应用场景
1,包含关系的比较
2,数据去重 例 ls=[“p”,”p”,”y”,”y”,123] s=set(ls) lt=list(s)
二、序列类型
序列是一维向量元素,元素类型可以不同,元素间序号引导
延伸:字符串类型、元祖类型、列表类型。
序列处理函数及方法:
6个操作符
x in S
x not in S
s+t
s*n或n*s
s[i]
s[i:j]或S[i,j,k]
5个函数和方法
len(s)
min(s)
max(s)
s.index(x)或s.index(x,i,j) 返回序列s从i开始到j位置中第一次出现元素x的位置
s.count(x) s中出现x的总次数
元祖类型及操作
元祖可以被看做是不能改变的列表。
元祖是一种序列类型一旦创建就不能修改,使用小括号()或tuple创建,元素间用逗号隔开,
元祖类型继承了序列类型的全部通用操作
因为元祖创建后不能修改,因此没有特殊操作
列表类型
列表是一种数据类型,创建后可以随意修改
使用中括号[]或list创建
列表类型的操作函数及方法
ls[i]=x
ls[i:j:k]=lt
del ls[i]
del ls[i:j:k]
ls+=lt 更新列表ls,将列表lt元素增加到列表ls中
ls*=n 更新列表ls,其元素重复n次
ls.append(x) 表示在列表
ls.clear()
ls.copy()
ls.insert(i,x)
ls.pop(i) 取出第i位置的元素取出并删除该元素
ls.remove(x) 将列表ls中出现的第一个元素x删除
ls.reverse()将列表ls中的元素反转
访问列表中所有元素
如果列表中有上百万个元素,你只需要三行就能访问到所有的元素。
dogs=[‘border collie’,’australian cattle dog’,’lamdba’]
for dog in dogs:
print(dog)b
穷举列表
循环一个列表的时候,你可能想获取当前元素的索引。你可以采用list.index(value)的方式获取,或者采取一个更简单的方法。enumerate()函数可以帮助你跟踪每项元素的索引,如下所示:
dogs=[‘border collie’,’australian cattle dog’,’lamdba’]
for index,dog in enumerate(dogs):
place=str(index)
print(“place:”+place+”dog:”+dog)
列表推导式
数字列表的推导式
回顾上节知识,我们可以创建一个包含前10个数字的列表,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 # Store the first ten square numbers in a list. # Make an empty list that will hold our square numbers. squares = [] # Go through the first ten numbers, square them, and add them to our list. for number in range(1,11): new_square = number**2 squares.append(new_square) # Show that our list is correct. for square in squares: print(square) |
上述代码中我们实现了创建包含10个数字的列表,对每个数字作平方操作并将它们存储进新的数组的功能。代码略显冗长,我们可以省略 for 循环中的 new_square 参数,简化代码。使用列表推导式就可以进一步简化代码,如下所示:
1 2 3 4 5 6 # Store the first ten square numbers in a list. squares = [number**2 for number in range(1,11)] # Show that our list is correct. for square in squares: print(square) |
平方操作和生成新列表的过程都浓缩进了一行代码。你是不是已经晕头转向了,让我们来看看这行代码发生了什么。
首先我们定义了一个列表,名字为 squares 。
接下来看看列表中括号中的代码:
for number in range(1, 11)
它在1-10之间创建一个循环,把每个数字存储到变量 number 中。接下来我们看一看对每次循环中的 number 作了哪些操作。
number**2
每个 number 都作了平方操作,并将结果存储在了定义好的队列中。我们可以用如下语言来阅读这行代码:
squares = [raise number to the second power, for each number in the range 1-10]、
其他例子
上个例子是对数字作平方操作,下列代码是对数字作乘操作,仔细阅读代码,体会数字列表表达式的用法。
1 2 3 4 5 6 7 8 9 10 # Make an empty list that will hold the even numbers. evens = [] # Loop through the numbers 1-10, double each one, and add it to our list. for number in range(1,11): evens.append(number*2) # Show that our list is correct: for even in evens: print(even) |
简化后代码如下所示:
1 2 3 4 5 # Make a list of the first ten even numbers. evens = [number*2 for number in range(1,11)] for even in evens: print(even) |
非数字列表的推导式
我们也可以在非数字列表中运用推导式。在下面的例子中,我们会创建一个非数字列表,然后利用推导式生成一个新的列表。不运用推导式的源代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 # Consider some students. students = [‘bernice’, ‘aaron’, ‘cody’] # Let’s turn them into great students. great_students = [] for student in students: great_students.append(student.title() + ” the great!”) # Let’s greet each great student. for great_student in great_students: print(“Hello, ” + great_student) |
我们想写下如下所示的推导式:
great_students = [add ‘the great’ to each student, for each student in the list of students]
代码如下所示:
1 2 3 4 5 6 7 8 9 # Consider some students. students = [‘bernice’, ‘aaron’, ‘cody’] # Let’s turn them into great students. great_students = [student.title() + ” the great!” for student in students] # Let’s greet each great student. for great_student in great_students: print(“Hello, ” + great_student) |
动手试一试
三、字典类型
键值对
采用大括号和dict()创建,键值对间用:分割
字典处理函数及方法
del d[k] 删除字典d中键k对应的数据值
k in d 判断键k是否在字典中,如果在返回True,否则False
d.keys() 返回字典d中所有的键信息
d.values()
d.items()
d.get(k,<default>) 键K存在,则返回相应值,不在则返回<default>
d.pop(k,<default>) 键K存在,则取出相应值,不在则返回<default>
d.popitem() 随机从字典中取出一个键值对,以元祖形式返回
d.clear()
len(d)