02 python 基础知识点 (容器部分+字符串)

第6章 容器类型的数据

Python内置的数据类型如序列列表元组等 )、集合字典等可以容纳多项数据,我们称它们为容器类型的数据。

6.1 序列简介

序列(sequence)是一种可迭代的、元素有序的容器类型的数据。

包括列表(list)、字符串(str)、元组(tuple)、字节序列(bytes)等。

6.1.1 序列的索引操作

序列中的元素都是有序的,每一个元素都带有序号,这个序号叫作索引。索引有正值索引、负值索引之分,正值索引为左到右,从(0 一> N-1)(比如单词)。

list= [1, 2, 2, 4]
len(list)    # len()  用于获取序列的长度

6.1.2 加和乘操作

加(+)和乘(*)运算符也可以用于序列中的元素操作。加(+)运算符可以将两个序列连接起来,乘(*)运算符可以将两个序列重复多次

6.1.3 切片操作

序列的切片(Slicing)就是从序列中切分出小的子序列。

lst = [1, 2, 3, 6, 2]
lst[0:2]     # [1, 2]    # 使用“冒号”做切片操作   
'''切片运算符的语法形式为[start:end:step].   其中,start是开始索引,
end是结束索引,step是步长.
切片时获取的元素的间隔,可以为正整数(0开始),也可以为负整数,反向切片时
列表顺序会进行颠倒, 步长设置为-1时,元素顺序会颠倒.
切下的小切片包括start位置的元素,但不包括end位置的元素.'''

6.1.4 成员测试

成员测试运算符有两个:in、not in,in用于测试是否包含某一个元素,not in用于测试是否不包含某一个元素。

6.2 列表

列表(list)是一种可变序列类型,我们可以追加、插入、删除、替换列表中的元素。

6.2.1 创建列表

创建列表有四种方法:

# list(iterable)函数:参数iterable是可迭代对象(字符串、列表、元组、集合和字典等)
list1 = list([10,20,30,10,20,50])  
# [元素1,元素2,元素3,⋯]:指定具体的列表元素,元素之间以逗号分隔。 
list2 = [10,20,30,10,20,50]         
[i*i for i in range( a , b )]       # 列表的生成公式
lst = [],   lst1 = list()           # 空列表的创建

6.2.2 追加元素

列表是可变的序列对象,列表可以追加元素。

lst = [1, 2, 5, 3]
lst.append(4)  # 在列表中追加单个元素时,可以使用列表的append(x)方法。   
lst += [6, 7]  # 在列表中追加多个元素时,可以使用加(+)运算符或列表的extend()方法。
lst.extend([8, 9])   # 结果:[1, 2, 5, 3, 4, 6, 7, 8, 9]

6.2.3 插入元素(insert)

lst = [1, 2, 5, 3]  # 想向列表中插入元素时,可以使用列表的list.insert(i,x)方法.
lst.insert(1, 9)    # 结果: [1, 9, 2, 5, 3]  其中,i指定索引位置,x是要插入的元素.

6.2.4 替换元素

# 想替换列表中的元素时,将列表下标索引元素放在赋值符号(=)左边,进行赋值即可.
lst = [1, 2, 5, 3]  
lst[2] = 100        # 结果: [1, 2, 100, 3]

6.2.5 删除元素

remove(), pop(), del().

# 想在列表中删除元素时,可使用列表的list.remove(x)方法,如果找到匹配的元素x,则删除该元素.
lst = [1, 2, 5, 3, 2]   
lst.remove(2)  # 结果: [1, 5, 3, 2]  # 如果找到多个匹配的元素,则只删除第一个匹配的元素.
lst.pop(2)     # 结果: [1, 5, 2]  # X.pop() 根据索引移除元素,移除的某个位置的元素.
lst[1:2] = []  # 结果: [1, 2]     # 用切片的方式进行替换.
del(lst)       # 结果: name 'lst' is not defined  # del()命令,直接删除列表.

6.2.6 查询元素位置

index(), find().

lst = [1, 2, 5, 3, 2]  # index() 可以查询元素的位置.
lst.index(5)   # 结果: 2  # 列表不可以使用find函数进行查询,字符串可以用 find 和 index
'''如果有多个元素只能输出第一个元素的位置,
可以在指定区间查找, index中可以指定start 和 stop'''

6.2.7 列表元素的排序操作

lst = [1, 2, 5, 3, 2]
lst.sort(cmp=None, key=None, reverse=False)  # 语法  [1, 2, 2, 3, 5]
'''参数解析:
cmp :可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key : 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,
       指定可迭代对象中的一个元素.
reverse :排序规则,reverse = True 降序, reverse = False 升序(默认)'''

# 调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变    
new_list = sorted(lst,reverse = True)    # [5, 3, 2, 2, 1]  

# 可以通过关键字进行排序

6.2.8 获取列表中的元素

lst = [1, 2, 5, 3, 2]
lst[1: 4]        # 正向索引  从0到 N-1   # [2, 5, 3]
lst[-3: -1]      # 逆向索引 从-N 到-1    # [5, 3]
lst[-1: -4: -1]  # 获取反向列表       # [2, 3, 5]
lst[3]    # 获取某个列表某个位置的值的方法,直接在后面加上[]及其位置  # 结果: 3

6.3 元组

元组(tuple)是一种不可变序列类型,不可以执行替换操作。

6.3.1 创建元组

创建元组时有两种方法:

# tuple(iter)函数:参数iterable是可迭代对象(字符串、列表、元组、集合...等)(双括号)
tup=tuple(('python','world',36))   
# (元素1,元素2,元素3,⋯):指定具体的元组元素,可以使用小括号括起来,也可以省略小括号
tup = (1, 2, 3, 5)  
# 只包含一个元组的元素需要使用逗号和小括号, 没有逗号时直接会将元组内部值赋值给变量 
tup = ('python',)   
print(type(tup))    # type() 查看变量类型  # <class 'tuple'>
t1 = ()             # 空元组的两种创建方式
t2 = tuple()

6.3.2 元组拆包

创建元组,并将多个数据放到元组中,这个过程被称为元组打包,
与元组打包相反的操作是拆包,就是将元组中的元素取出,分别赋值给不同的变量。

a,b,c,d=1,2,3,4     # 解包赋值,

6.3.3 元组的遍历

tup = (1, 2, 5, 3, 2)    # enumerate: 枚举
for i in tup:            # 可以使用for循环进行遍历
'''enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
同时列出数据和数据下标,一般用在for循环当中,enumerate()是python的内置函数'''
for index,item in enumerate(coffee_name):    # 前面的index为输出的序号

6.4 集合

集合(set)是一种可迭代的、无序的、不能包含重复元素的容器类型的数据。

6.4.1 创建集合

# set(iterable)函数:参数iterable是可迭代对象(字符串、列表、元组、集合和字典等)
set_1 = set([1, 2, 4, 5])    
# {元素1,元素2,⋯}:指定具体的集合元素,以逗号分隔。对于集合元素,需要使用大括号括起来。
set_1 = {1, 2, 3, 5}         
set_1 = set()     # 空集合的创建   
{i*i for i in range(a, b)}   # 集合的生成公式

6.4.2 修改集合

修改集合类似于修改列表,可以向其中插入和删除元素。修改可变集合有如右所示的常用方法。

add(), updata(), remove(), discard(), pop(), clear(), del()

set_1 = {1, 2, 3, 5}
# 集合的新增操作:# add(elem):添加元素,如果元素已经存在,则不能添加,不会抛出错误。 
set_1.add(9)       # {1, 2, 3, 5, 9}
set_1.update({4, 6, 8})  # update( ):添加多个元素   # {1, 2, 3, 4, 5, 6, 8, 9}
# remove(elem):删除元素,如果元素不存在,则抛出错误。  
set_1.remove(4)    # {1, 2, 3, 5, 6, 8, 9}
# discard:一次删除一个指定元素,如果指定的元素不存在不抛异常  
set_1.discard(5)   # {1, 2, 3, 6, 8, 9}
print(len(set_1))  # 可以使用len()统计集合内部元素的多少    # 6
set_1.pop()     # pop( ):一次只删除一个任意元素     # {2, 3, 6, 8, 9}
set_1.clear()   # 清除集合。   # set()
del(set_1)      # 可以使用del 进行删除集合

集合之间的数学操作

s1 = {1, 2, 3, 5}
s2 = {2, 3, 4, 6}
print(s1.intersection(s2))  # 求两个集合的交集 print(s1 & s2)  # {2, 3}
print(s1.union(s2))         # 求两个集合的并集 print(s1 | s2)  # {1, 2, 3, 4, 5, 6}
print(s1.difference(s2))    # print(s2 - s1) 求两个集合的差集  # {1, 5}
print(s1.symmetric_difference(s2))  # 求集合对称差集, print(s1 ^ s2) # {1, 4, 5, 6}

6.4.3 判断操作

in / not in          # 判断集合中是否存在该元素

6.4.4 集合间的关系

s1 = {2, 4}
s2 = {2, 3, 4, 6}
# 一个集合是否是另一个集合的子集,可以调用方法issubset进行判断  
print(s2.issubset(s1))    # False  
# 一个集合是否是另一个集合的超集,可以调用方法issuperset进行判断
print(s2.issuperset(s1))  # True   
# 两个集合是否没有交集,可以调用方法isdisjoint进行判断   
print(s2.isdisjoint(s1))  # False    

6.4.5 set集合

基本特点:(1) 无序性   (2) 确定性    (3) 不重复性.
set( ) 实质:内部进行 可迭代性的 for 循环.
在python3中按数据类型的可变与不可变大致分为如下几种类型:

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

python中,用set来表示一个无序不重复元素的序列。set的主要作用就是用来给数据去重
可以使用大括号 { } 或者 set() 函数创建集合,但是注意如果创建一个空集合必须用 set() 而不是 { },因为{}是用来表示空字典类型的.

6.5 字典

字典(dict)可迭代的、通过键(key)来访问元素的可变的容器类型的数据,字典是一个无序的序列
字典由两部分视图构成:键视图和值视图。键视图(key,类似索引,可以只含数字)不能包含重复的元素,值视图能(values 类似存储空间)。在键视图中,键和值是成对出现的。
字典、列表、集合都是可以增、删、改的可变序列,元组为不可变序列。

6.5.1 创建字典

dic = dict(name='jack',age = 20)  # dict()函数   # {'name': 'jack', 'age': 20}
# 指定具体的字典键值对,键值对之间以逗号分隔,最后用大括号括起来。
dic =  {'key1':'value1', 'key2': 'value2'}  
dic = {}      # dict   空字典的创建 , 设置为集合需要 set1 = set({})
dic = dict()  # dict

6.5.2 修改字典

字典可以被修改,但都是针对键和值同时操作的,对字典的修改包括添加、替换和删除。

scores['张三'] = 63     # 通过'[]'进行新增操作,如果已存在就执行修改动作
scores.pop('王麻子')    # 使用字典中”pop”的方法删除
scores.clear()         # 通过‘clear’清空字典
del scores['张三']     # 通过‘del’命令进行删除某元素,同时删除其键和值  

6.5.3 访问字典视图

我们可以通过字典中的三种方法访问字典视图。

items(), keys(), values()

scores = {'李四': 30, '张三': 90}
# items():返回字典的所有键值对视图。
items = scores.items()       # dict_items([('李四', 30), ('张三', 90)])
keys = list(scores.keys())   # keys():返回字典键视图。   # ['李四', '张三']
values = scores.values()     # values():返回字典值视图。   # dict_values([30, 90])

6.5.4 获取字典中的元素

scores = {'李四': 30, '张三': 90}
print(scores['李四'])   # []如果字典中不存在指定的key,抛出keyError异常。  # 30
# get()方法取值,如果字典中不存在指定的key,并不会抛出KeyError而是返回None,
# 可以通过参数设置默认的value(如举例里的96),以便指定的key不存在时返回。   
print(scores.get('王六',96))     # 96
# 通过‘in’和‘not in’判断是否存在该元素,只会对前面的键进行判断,与后面的值无关
print('张三' in scores)  # True  

6.5.5 字典元素的遍历

scores = {'李四': 30, '张三': 90}
print(scores['李四'])   # print(scores.get(items))  # 输出字典的'values'值  # 30
print(scores.keys())    # 输出字典的 'key'值, items是关键字列表

6.5.6 字典生成第三种方式

dic = zip(items,prices)     # 内置函数 ‘zip’
b = {items:prices for items,prices in zip(items, prices)}    # 方式二

第7章 字符串

eval()      # 将“input”输入的函数直接转换为真实的数据类型
round(a,x)  # 数学函数进行四舍五入,其中a是对象,x是四舍五入保留小数,count()统计元素数量
count()     # 函数, 统计字符串里某个字符出现的次数。可以选择字符串索引的起始位置和结束位置 
str.count("char", start,end)  # 或 str.count("char")    # --> int   返回整数     

7.1 字符串的表示方式

7.1.1 普通字符串

  • 普通字符串指用单引号(')或双引号(")括起来的字符串。
  • 常用的转义符如下:
    •  转义字符:   (\)   (r'')
    • 换行:\n                             #  直接跳行
    • 回车:\r                             #  会对原始值进行覆盖
    • 水平制表符 : \t                #  中间留空格
    • 退格 :\b                           #  删除
    • 反斜杠 :\\
    • 单引号:\'                          # 如果需要单独输出 ’ 可以在前面加 \ 进行输出
    • 双引号: \“

7.1.2 原始字符串

前面加上  r '  '  不会被转译

7.1.3 长字符串

如果要使用字符串表示一篇文章,其中包含了换行、缩进等排版字符,则可以使用长字符串表示。对于长字符串,要使用三个单引号('''或三个双引号(""")括起来。

7.1.4 字符串的拼接

在需要进行字符串拼接时建议使用 str类型的join方法,而非+ ,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。

7.2 字符串与数字的相互转换

7.2.1 将字符串转换为数字

将字符串转换为数字,可以使用int()float( )实现,如果成功则返回数字,否则引发异常。

在默认情况下,int()函数都将字符串参数当作十进制数字进行转换,int()函数也可以指定基数(进制)。

7.2.2 将数字转换为字符串

将数字转换为字符串,可以使用str( )函数,str( )函数可以将很多类型的数据都转换为字符串。

7.3 格式化字符串

7.3.1 格式化字符串

格式化字符串的两种方式:

  • %作占位符    (%s表示字符串占位   ,%i / %d 表示整数占位,%f 表示浮点数值占位)    举例:print('我叫%s,今年%d岁' % (name,age))           #  后面为多个元素时记得加()
  • 表示其精度和宽度:print('%10.3f'   %    3.14526)       #  一共宽度 10,小数点后 3 位
  • format方式,{ }作占位符        其中大括号内部数值表示引用后方元组的序号        举例: print('我叫{0},今年{1}岁'.format(name,age))               
    • 表示其精度和宽度:print('{1:3.3f},爱你'.format(1335(输出未调用该值),3.2545621))       # 前边的1 表示索引的的位置 注意有冒号 10.3f表示显示一共显示10位,三位小数
    • 其二:用于填充格式化'{0:*>10}'.format(9)        #  右对齐 这种模式用法有三种,:[填充字符][对齐方式 <^>][宽度]
      • a.冒号后面接的是选用的填充字符, 如上面用的是*号
      • b.<^> 指定三种不同的对齐方式, 可简单理解为看箭头指向方向为对齐的方向
      • c.对齐方向后面是宽度, 如上面的右对齐的宽度是10
      • d.指定的内容一定需要用"{}"括起来,而且必须是从0开始,或者可以把0去掉(此处待研究)
      • 上面的显示结果是:输出9,按照10位宽度右对齐方式,也就是左边用9位"*"代替      # 输出:*********9
  • 使用f-string       举例: print(f'我叫{name},今年{age}岁')
    • f-string采用 {content:format} 设置字符串格式,其中 content 是替换并填入字符串的内容,可以是变量、表达式或函数等,format 是格式描述符采用默认格式时不必指定 {:format},如上面例子所示只写 {content} 即可            #  print(f'{i:*>2}')    *为占位符
  • 格式化字符串:
for i in range(1,30):
    print (str(i).rjust(2,'0'))     # 输出两位格式化,如1自动补充为“01”

7.4 操作字符串

7.4.1 编码的转换     

GBK转换:

  • byte = s.encode(encoding='GBK')               # 编码,s 为源文件
  • print(byte.decode(encoding='GBK'))           # 解码

UTF-8转换:

  • byte = s.encode(encoding='UTF-8')            # 编码,s 为源文件
  • print(byte.decode(encoding='UTF-8'))         # 解码

7.4.2 字符串的查询命令

s = 'loader'
print(s.index('lo'))      # 查询元素第一次出现的位置,如果不存在该元素即报错
# 查询元素第一次出现的位置,如果不存在该元素输出‘-1’     # 推荐使用“find”命令
print(s.find('lo'))        
print(s.rindex('lo'))     # 查询元素最后一次出现的位置,如果不存在该元素即报错 
print(s.rfind('lo'))      # 查询元素最后一次出现的位置,如果不存在该元素输出‘-1

7.4.3 字符串的大小写转换

  • upper()              # 全部转换为大写          # 举例: a = s.upper()
  • lower()              #  全部转换为小写         # 举例: a = s.lower()
  • swapcase()       # 大小写进行相互转换
  • capitalize()        # 第一个字符大写,其余全部进行小写
  • title()                 # 每个单词的第一个字符大写,其余全部小写

7.4.4 字符串内容对其的操作

字符串调整: str(i).rjust(2,'0').

  • center()         # 居中对其       # 可以设置全体宽度和填充物    
  • ljust()            # 左对齐           # left 左
  • rjust()           # 右对齐           # print (str(i).rjust(2,'0'))
  • zfill()            # 右对齐           # 不可以指定填充物,默认为‘0’进行填充 

7.4.5 字符串的劈分操作

  • split()    # 举例:print(s1.split(sep=',', maxsplit=2))      #  默认从左到右执行劈分操作,返回值为列表,通过参数 “sep”可以指定劈分符,通过参数“maxsplit”可以指定最大劈分数量.    
  • rsplit()   # 从右向左开始劈分.

7.4.6 判断字符串的操作

  • isidentifier()     # 判断是否合法
  • isspace()         # 判断是否全部为空白字符
  • isalpha()          # 判断是否全为字母
  • isdecimal()      # 判断是否全部为十进制数值
  • isnumeric()      # 判断是否全部为数字组成
  • isalnum()         # 判断是否全部由字母和数字组成,可以只含数字或字母
  • isdigit()            # 检测字符串是否只由数字组成,只对0和正数有效,负数判定为False。    # 举例: if X.isdigit()  (二进制?)
  • endswith         # 判断以什么结尾.     举例:if item.endswith('.py'): 就怎么怎么样

7.4.7 字符串的其他操作

  • replace()          # 替换字符串中的元素         举例:print(s1.replace('python','Java',2))       (前面一个字符是被替换掉的部分,最后的数值为需要替换的数量,默认为全部替换)
  • join()                # 将列表、元组中的字符串合并       举例:print('\t'.join(lst))     (前面为分隔符,后面为元组)

7.4.8 字符串的比较操作

  • 两个字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以 得到指定字符的ordinal value。与内置函数ord( ) (其他数据类型转换为数值)对应的是内置函数chr( ) (其他数据类型转换为字母),调用内置函数chr时指定ordinal value可以得到其对应的字符.
  • >,>=,<,<=,==,!=

7.4.9 字符串的切片操作

  • 切片操作完整公式 [start:stop:step]         # 举例:print(s[1:5:1])     # 正负号表示显示正反方向,正数从前往后,负数从后向前,颠倒原字符串顺序     # 前边位置的正负只限制其位置,不管其顺序.

7.4.10 Python中的 join( )方法

  • join( )是一个字符串方法。
  • sep 是分隔符
  • 语法:'sep'.join(sep_object)。
  • 用法:连接任意数量的字符串(包括要连接的元素字符串、元组、列表、字典),用新的目标分隔符连接,返回新的字符串。
  • 返回值: join()方法返回一个被子字符串连接的字符串
  • Type Error: 报错, 如果这个可迭代元素包含任何不是字符串的值,join()函数就会抛出TypeError。
c={'hello':1,'world':2}
'*'.join(c)   # 'hello*world'
d = ['hello', 'hi', 'world', '2']
'\\'.join(d)  # 'hello\\hi\\world\\2'

7.4.11 strip( )方法的使用

  • Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
  • 注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值