1、序列
序列就是用于存放多个值的连续的空间,且具有顺序关系。
python中序列结构主要包括列表、元素、集合和字典。
1.1索引(indexing)
索引是从0开始计算
在python中索引也可以是负数,从右向左计数,最右边的数是的索引为-1(也就是最后一个数的下标可以是-1).
如
a = ["你","好","啊","吗"]
print( a[0] )
print(a[-4])
print("--------分割线--------")
print(a[1])
print(a[-3])
print("--------分割线--------")
print(a[2])
print(a[-2])
print("--------分割线--------")
print(a[3])
print(a[-1])
输出
你
你
--------分割线--------
好
好
--------分割线--------
啊
啊
--------分割线--------
吗
吗
1.2、切片(Slicing)
切片操作是访问序列中的元素的另一种方法
语法格式:
sname[start : end : step]
说明:
1、sname:序列的名字
2、start:切片的起始位置(包括该位置),如果不指定,默认为0
3、end:切片的截止位置(不包括该位置),如果不知道,默认为序列的长度
4、step: 切片的步长,如果省略(省略时可以连最后一个冒号也一起省略),默认为1。
如:
animal = ["小马", "小牛", "小羊", "小狗", "小猴", "小猫", "小蛇", "小虎", "小兔"]
print(animal[1:5])
print(animal[2:5:2])
输出
['小牛', '小羊', '小狗', '小猴']
['小羊', '小猴']
技巧:如果需要复制一整个序列,可以将start,end都有省略,但是中间的冒号要保留。如
animal[ : ]
1.3、序列相加与相乘
1、序列相加
可以将2个同类型(同为列表、元组、字典等,序列里的元素类型可以不同)的序列进行相加操作(使用+号进行),其实就是拼接2个序列
2、序列相乘
一个序列乘以数字n,那么就将序列重复n次成为新的序列。
如
animal = ["小马", "小牛", "小羊"]
print(animal * 3)
输出
['小马', '小牛', '小羊', '小马', '小牛', '小羊', '小马', '小牛', '小羊']
如果只是为了初始化指定列表长度的功能,那么可以采取以下方式
如
a = [None] * 5
print(a)
输出
[None, None, None, None, None]
1.4、检查某个元素是否是序列的成员(元素)
可以使用in关键字来检查
语法格式:
value in sequence
例子
animal = ["小马", "小牛", "小羊"]
print("小马" in animal)
print("xiaoma" in animal)
print("xiaoma" not in animal)
输出
True
False
True
1.5、计算序列的长度、最大值和最小值
计算序列的长度使用内置函数len()、最大值使用内置函数max()和最小值使用内置函数min()
如:
a = ["1", "5", "2"]
print("a序列的长度", len(a))
print("a序列的最大元素", max(a))
print("a序列的最小元素", min(a))
输出
a序列的长度 3
a序列的最大元素 5
a序列的最小元素 1
python中的其他内置函数及其作用
函数 | 作用 |
---|---|
list() | 将序列转化为列表 |
str | 将序列转化为字符串 |
sum() | 计算元素和 |
sorted | 对元素进行排序 |
reversed() | 反向序列元素 |
enumerate() | 将序列组合为一个索引序列,多用在for循环中 |
如
a = ["1", "5", "2"]
print("[1,2,3]序列的元素和", sum([1,2,3]))
print("正序", sorted(a, reverse=True))
print("逆序", sorted(a, reverse=False))
2、列表(list)
python中的列表是非常灵活的,列表里的元素内容可以不同,因为他们之间没有任何关系,但是通常情况下我们在一个列表里只放一种数据类型,为得是增加数据的可读性
2.1、创建与删除列表
1、使用赋值运算符直接创建列表
语法格式如下:
listname = [element 1, element 2, ......, element n]
2、创建空列表
语法如下:
emptylist = []
3、创建数值列表
可以使用list()函数直接将range()函数循环出口的结果直接转换为列表
语法如下:(其中data的类型可以是range对象、字符串、元组或者其他可以迭代类型的数据)
list(data)
例子:
print(list(range(10)))
输出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4、删除列表
语法格式:
del listname
值得注意的是在python中有自带的垃圾回收机制会自动销毁不用的列表,故该语句我们比较少用。
2.2、访问列表元素
输出列表或者列表的某个元素的语法格式:
print(listname)或者print(listname[n])
2.3、遍历列表
遍历列表的方法很多,这边介绍2种最常用的
1、使用for循环
语法格式:
for item in listname:
# 输出item
例子:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
for i in fruit:
print(i)
输出
apple
banana
orange
pear
watermelon
2、使用for循环和enumerate()函数实现
使用for循环和enumerate()函数实现输出索引和元素
语法格式:
for index, item in enumerate(listname):
例子
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
for index,i in enumerate(fruit):
print(index, i)
输出
0 apple
1 banana
2 orange
3 pear
4 watermelon
2.4、添加、删除、修改列表元素
1、添加元素
语法格式如下:
listname.append(obj) #速度快,常用
或者
使用+号, #速度太慢
或者
insert()函数 #效率低,不推荐
例子:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
print("水果的种类有" + str(len(fruit)) + '种')
fruit.append("grape")
print("水果的种类有"+ str(len(fruit)) + '种')
输出
水果的种类有5种
水果的种类有6种
如果要将一个列表里的元素全部添加到另一个列表
可以使用下面语句:
listname.extend(seq) #seq为要添加进去的列表
2、修改元素
直接举例子说明
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
print(fruit)
fruit[2] = 'strawberry'
print(fruit)
输出
['apple', 'banana', 'orange', 'pear', 'watermelon']
['apple', 'banana', 'strawberry', 'pear', 'watermelon']
3、删除元素
(1)、根据索引删除
如:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
del fruit[1]
print(fruit)
输出
['apple', 'orange', 'pear', 'watermelon']
(2)、根据元素值删除
如:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
value = "apple"
if fruit.count(value) > 0: # 判断元素是否存在防止报错
fruit.remove(value)
print(fruit)
输出
['banana', 'orange', 'pear', 'watermelon']
2.5、对列表进行统计计算
1、获取指定元素出现的次数
使用count()函数
语法格式:
listname.count(obj)
2、获取指定元素首次出现的下标
使用index()函数
语法格式:
listname.index(obj)
3、统计数值列表的元素和
使用sum()函数
sum(iterable[,strart]) #iterable为要统计的列表名
2.6、对列表进行排序
1、使用sort函数进行排序
语法格式:
listname.sort(key=None,reverse=False)
参数说明,key是指定一个比较键,如当key=str.lower时,不区分大小写。
reverse=False时为降序,为True时为升序,默认为升序。
注意sort()函数对字符串进行排序时,先对大写字母进行排序,然后对小写字母进行排序。且对中文排序时,容易出错
如
fruit = ['Apple', 'banana', 'Orange', 'pear', 'watermelon']
print('-------区分大小写-------')
fruit.sort()
print(fruit)
print('-------不区分大小写-------')
fruit.sort(key=str.lower)
print(fruit)
输出
——-区分大小写——-
['Apple', 'Orange', 'banana', 'pear', 'watermelon']
-------不区分大小写-------
['Apple', 'banana', 'Orange', 'pear', 'watermelon']
2、使用sorted()函数进行排序
作用与sort()基本一样,但是sorted()不会改变原列表的顺序,sort()会。
语法格式:
sorted(iterable, key=None,reverse=False) #iterable为要排序的列表
如
fruit = ['Apple', 'banana', 'Orange', 'pear', 'watermelon']
fruit_a = sorted(fruit)
print("原列表顺序不变", fruit)
print(fruit_a)
输出
原列表顺序不变 ['Apple', 'banana', 'Orange', 'pear', 'watermelon']
['Apple', 'Orange', 'banana', 'pear', 'watermelon']
2.7、列表推导式
使用列表推导式可以快速生成一个列表,或让摸个列表生成满足指定需求的列表。
有以下几种常用方法
1、生成指定范围的数值列表
语法格式:
list = [Expression for var in range]
参数说明:list生成的列表名,Expression表达式用于计算新列表的元素
var循环变量,range采用range()生成的range对象
如生产10个随机数,范围在10到100之间
import random
randomnumber = [random.randint(10,100) for i in range(10)]
print(randomnumber)
输出
[65, 50, 57, 84, 56, 30, 27, 47, 98, 79]
2、根据列表生成指定需求的列表
语法格式:
newlist = [Expression for var in list]
如
import random
price = [100, 200, 300] # 商品价格
sale = [int(i*0.5) for i in price] # 打五折后的价格
print(sale)
输出
[50, 100, 150]
3、从列表中选择符合条件的元素组成新的列表
语法格式:
newlist = [Expression for var in list if condition]
如
import random
price = [100, 200, 300] # 商品价格
sale = [i for i in price if i > 200] # 价格大于200的商品价格
print(sale)
输出
[300]
3、元组
元组简单说就是不可变的列表(不可变序),用于保存不可修改的内容。
3.1、元组的创建与删除
1、用赋值运算符直接创建元组
语法格式(括号可以省略)
tuplename = (element 1,element 2,...element n)
如果创建的元组只有一个符号时,需要在元素的后面加个逗号
如:
a = ("a",) # 元组
a = ("a") # 字符串
2、创建空元组
语法格式
emptytuple = ()
3、创建数值元组
语法格式
tuple(data)
如
print(tuple(range(0, 10, 3)))
输出
(0, 3, 6, 9)
4、删除元组
语法格式
del tuplename
3.2、访问元组元素
print直接打印元组
语法格式
print(tuplename) #打印整个元组
print(tuplename[n]) #打印单个元组元素
print(tuplement[x:y]) #打印多个元素
当然也可以使用for循环来遍历,语法格式与列表一样
3.3、修改元组元素
修改元组里的单个元素的内容,是不支持的
如
a = (1,2,3)
a[1]= "a"
print(a)
报错
TypeError: 'tuple' object does not support item assignment
但是我们可以把一整个元组重新赋值
如
a = ('1', 2, 3)
print(a)
a = ('1', 6, 9)
print(a)
a = a+a
print(a)
输出
('1', 2, 3)
('1', 6, 9)
('1', 6, 9, '1', 6, 9)
注意进行元组的连接时,连接的内容必须都是元组。连接的元组只有一个元素时,不用忘记元素后面的逗号。
3.4、元组的推导式
语法格式与列表类似
例子
import random
randomname = (random.randint(10,100) for i in range(5))
print("生产的元组为", randomname)
输出
生产的元组为 <generator object <genexpr> at 0x000001C573448E60>
可以发现元组推导式生成的结果是一个生成器对象,而不是元组或者列表。这点与列表不同。其中转化成元组用tuple()函数,转化为列表用list函数
通过for循环遍历,或者使用next()方法可以使用元组推导器生成的生成器对象
如:(next()例子)
import random
randomname = (i for i in range(3))
print(randomname.__next__())
print(randomname.__next__())
print(randomname.__next__())
print(tuple(randomname))
输出
0
1
2
()
如(for循环遍历例子)
import random
randomname = (i for i in range(3))
for i in randomname:
print(i, end=" ")
print(tuple(randomname))
输出
0 1 2 ()
3.5、元组与列表的区别
1、元组不可变序列;列表可变序列
2、元组不能修改、添加,删除单个元素;列表可以
3、元组只支持切片访问,不支持切片修改;列表都支持
4、元组访问和处理速度比列表快。使用当只需要对其中的元素进行访问时,,建议使用元组
5、元组可以作为字典的键;列表不能。
4、字典
字典是无序的可变序列。保存内容是以“键—值对”的形式存放,键是唯一的,值可以是多个的。
字典的主要特征:
1、通过键来读取而不是索引
2、字典是任意对象的无序集合
3、字典是可变的,并且可以任意嵌套。
4、字典的键必须是唯一和不可变的。
4.1、字典的创建与删除
创建字典语法格式
dictionary = {'key1':'value1','key1':'value1',...,'keyn':'valuen',}
创建空字典的语法
dictionary = {}或者dictionary = dict()
1、通过映射函数创建字典
dicttionary = dict(zip(list1,list2)) #list1作为键的列表 list2作为值的列表
注意如果list1与list2长度不一样,则与最短的列表长度一样
2、通过“键——值对”创建字典
dictionary = dict(key1=value1,key2=value2,...,keyn=value n)
如
a = dict(福州='3',)
print(a)
输出
{'福州': '3'}
python中还可以使用dict对象的fromkeys()方法创建值为空的字典
语法格式:
dictionary = dict.fromkeys(list1) #list1为键的列表
当然还有可以通过存在的元组和列表来创建字典(列表不能作为键,字典可以)
如
list = [1, 2, 3]
b = ('1', '2', '3')
c = {b: list}
print(c)
输出
{('1', '2', '3'): [1, 2, 3]}
3、删除字典
语法格式
del dictionary
4、把字典变为空字典
语法格式
dictionary.clear()
当然还有pop(),popitem()方法。
4.2、通过键—值对访问字典
如果想直接输出字典的内容直接printf(dictionary)
,但是我们一般不这么做。一般是根据指定的键得到我们想要的结果。
如
print(dictionary([key])
但是这样容易出错,我们一般使用以下语句
print(dictionary[key] if 'key ' in dictionary else '我的字典里没有该内容')
python中推荐使用字典对象的get()
方法获取指定的键的值
语法格式如下:
dictionary.get(key,[default])
说明defaults是当指定的键不存的时候就返回一个默认值,default可以省略,如果省略返回None
4.3、遍历字典
1、通过items()方法遍历
语法格式:
dictionary.items() #返回可以遍历的j键-值元组列表
2、for循环遍历该元组列表
如
dictionary = {'qq':'12333'}
for i in dictionary.items():
print(i)
或
for key,value in dictionary():
print(value)
4.4、添加、修改、删除字典元素
1、添加元素
语法格式
dictionary[key] = value
注意如果键名之前已经存在,那么将换替换该键的值
2、删除某个元素
如:
dictionary = dict[key]
或者
if "key" in dictionary: #防止键不存在时报错
dictionary = dict[key]
4.5、字典推导式
其表现形式与列表推导式相似,这边不做说明
5、列表、元组、字典的区别
数据结构 | 是否可变 | 是否有序 | 定义符号 |
---|---|---|---|
列表 | 可变 | 有序 | [] |
元组 | 不可变 | 有序 | () |
字典 | 可变 | 无序 | {key,value} |
题目:创建一个包含1~50之间所有素数的列表,打印显示该列表;随后只保留该列表前5个数字,删除其余内容并打印输出相应结果;再将每个元素值加。上20,显示列表内容。
prime_number = [2]
for i in range(3, 51):
for j in range(2, i):
if i % j != 0:
n = i
if j == n-1:
prime_number.append(i)
break
else:
break
print(prime_number)
prime_number = prime_number[:5]
for k in range(5):
prime_number[k] = prime_number[k] + 20
print(prime_number)
6、逻辑判断内置函数
all(iterable) | 集合中的元素都为真的时候为真,注意空字串返回为True |
---|---|
any(iterable) | 集合中的元素有一个为真的时候为真,特别是空串返回False |
cmp(x,y) | x<y,返回负数;x = y,返回0;x>y返回正数 |