python知识整合(序列)

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返回正数
0%