当前位置:   article > 正文

python-重点!!序列:列表、元组、集合、字典、字符串_字符串、列表、元组和集合都是序列,其中每个元素都有编号,因此都可以通过索引

字符串、列表、元组和集合都是序列,其中每个元素都有编号,因此都可以通过索引

一、序列概述

1.序列结构主要有:列表、元组、集合、字典、字符串

其中,集合和字典不支持索引、切片和相乘操作

2.切片

访问序列中一定范围的元素

sname[start : end : step]

参数说明:

  • sname:序列名称
  • start:不指定则默认为0
  • end:不指定则默认为序列的长度
  • step:步长,若省略则默认为1

注:若要复制整个序列,中间冒号保留,如verse[:]

3.序列相加

使用“+”将相同类型的序列进行连接,但不去除重复的元素

  1. num1 = [1,2,3]
  2. num2 = [one,tow]
  3. print(num1 + num2) #>>>[1,2,3,one,tow]

注:相同类型指同为列表、元组、字符串等,序列中的元素类型可以不同

  1. num1 = [1,2,3]
  2. print(num + "输出其和") #错误

4.乘法

  1. num = [1,2,3]
  2. print(num * 2) #>>>[1,2,3,1,2,3]
  3. enmpty = [None] * 3
  4. print(empty) #>>>[None,None,None]

5.检查某个元素是否是序列的成员  in/not in

语法:value in sequence

value即要检查的元素,sequence即指定的序列

返回值:True  /  False

6.计算序列的长度、最大值和最小值

长度:len()

最大值:max()

最小值:min()

其他内置函数:

  • list() 
  • str()
  • sum()   计算元素和
  • sorted()    对元素进行排序  

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象(iterable)进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

list.sort()    list = sorted()

语法: sorted(iterable, key=None, reverse=False)  

参数说明:

  • iterable -- 可迭代对象。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。如,设置“key = str.lower”表示在排序时不区分字母大小写
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)

返回值

返回重新排序的列表。

  1. sorted([5, 2, 3, 1, 4])
  2. #>>>[1, 2, 3, 4, 5] # 默认为升序
  3. #也可以使用 list 的 list.sort() 方法。这个方法会修改原始的 list(返回值为None)。通常这个方法
  4. #不如sorted()方便-如果不需要原始的 list,list.sort()方法效率会稍微高一些。
  5. a=[5,2,3,1,4]
  6. a.sort()
  7. print(a)
  8. #>>>[1,2,3,4,5]
  9. #利用key进行倒序排序
  10. example_list = [5, 0, 6, 1, 2, 7, 3, 4]
  11. result_list = sorted(example_list, key=lambda x: x*-1)
  12. print(result_list)
  13. #>>>[7, 6, 5, 4, 3, 2, 1, 0]
  14. #要进行反向排序,也通过传入第三个参数 reverse=True:
  15. example_list = [5, 0, 6, 1, 2, 7, 3, 4]
  16. sorted(example_list, reverse=True)
  17. #>>>[7, 6, 5, 4, 3, 2, 1, 0]

:用 lambda 来创建匿名函数:

lambda [arg1 [,arg2,.....argn]]:expression
  1. sum = lambda num1, num2: num1 + num2
  2. # 调用sum函数
  3. print "相加后的值为 : ", sum( 10, 20 )
  4. print "相加后的值为 : ", sum( 20, 20 )
  5. #>>>相加后的值为 : 30
  6. #>>>相加后的值为 : 40

  • reversed()    反序序列中的元素
  1. # 字符串
  2. seqString = 'Runoob'
  3. print(list(reversed(seqString)))
  4. # 元组
  5. seqTuple = ('R', 'u', 'n', 'o', 'o', 'b')
  6. print(list(reversed(seqTuple)))
  7. # range
  8. seqRange = range(5, 9)
  9. print(list(reversed(seqRange)))
  10. # 列表
  11. seqList = [1, 2, 4, 3, 5]
  12. print(list(reversed(seqList)))
  13. #>>>['b', 'o', 'o', 'n', 'u', 'R']
  14. #>>>['b', 'o', 'o', 'n', 'u', 'R']
  15. #>>>[8, 7, 6, 5]
  16. #>>>[5, 3, 4, 2, 1]
  • enumerate()   将序列组合为一个索引序列,同时列出数据和数据下标,多用在for循环中
enumerate(sequence, [start=0])       start -- 下标起始位置
  1. >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
  2. >>> list(enumerate(seasons))
  3. [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
  4. >>> list(enumerate(seasons, start=1)) # 小标从 1 开始
  5. [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
  1. #普通的 for 循环
  2. i = 0
  3. seq = ['one', 'two', 'three']
  4. for element in seq:
  5. print(i, seq[i])
  6. i += 1
  7. #>>>0 one
  8. #>>>1 two
  9. #>>>2 three
  10. #for 循环使用 enumerate
  11. seq = ['one', 'two', 'three']
  12. for i, element in enumerate(seq): # i为索引,element为元素值,seq为序列名称
  13. print(i, element)
  14. #>>>0 one
  15. #>>>1 two
  16. #>>>2 three
'
运行

二、列表

https://blog.csdn.net/m0_73809176/article/details/127971868?spm=1001.2014.3001.5501

三、元组、字典、集合

https://blog.csdn.net/m0_73809176/article/details/127972422?spm=1001.2014.3001.5501

四、字符串

1.字符串编码

1.1背景信息

ASCLL码:仅对10个数字、26个大写英文字母、26个小写英文字母,以及一些其他符号进行了编码;(美国标准信息交换码,最早的字符串编码)

GBK、GB2312:是我国制定的中文编码标准,1个字节表示英文字母,2个字节表示中文字符

UTF-8:国际通用编码,1个字节表示英文字母,3个字节表示中文

在Python中,有两种常用的字符串类型,分别为str 和bytes 。其中,str表示Unicode字符(ASCLL或者其他);bytes表示二进制数据(包括编码的文本)。这两种类型的字符串不能拼接在一起用。通常情况下,str在内存中一Unicode表示,一个字符对应若干个字节。但是如果在网络上传输,或者保存在磁盘上,就需把str转换为字节类型即bytes类型。

1.2使用encode()方法编码

用于将字符串转换为二进制数据(即bytes),也称“编码”

语法:str.encode([encoding = "utf-8"][,errors = "strict"])

str:要进行转换的字符串

encoding = "utf-8" :可选参数,用于指定进行转码时采用的字符编码,默认为UTF-8

errors = "strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(默认)(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等

1.3使用decode()方法解码

decode()用于将二进制数据转换为字符串,也称“解码”

bytes.decode([encoding = "utf-8"][,errors = "strict"])

2.字符串常用操作

2.1拼接字符串  “+”

中间不会留空格,相同类型拼接

2.2计算字符串的长度

len(string)

  1. str1 = '人生苦短,我用Python!'
  2. len1 = len(str1) #包括“,”、“!”
  3. len2 = len(str1.encode()) #计算UTF-8编码的字符串的长度
  4. print(len1) #>>>14
  5. print(len2) #>>>28 汉字加中文标点符号共7个,占21个字节,英文字母和英文标点符号占7个字节

2.3截取字符串

2.4分割、合并字符串

  • 2.4.1分割字符串:split()方法--把一个字符串按照指定的分隔符切分为字符串列表

语法:str.split(sep,maxsplit)

sep:用于指定分隔符,可以包含多个字符,默认为None,即所有空字符(包括空格、换行符“\n”、制表符“\t”等)

maxsplit:可选参数,用于指定分割的次数,若不指定或者为-1,则分割次数没有限制,否则返回结果列表的元素个数最多为maxsplit+1

注:若不指定sep,那么也不能指定maxsplit参数

  1. str1 = "我 的 目 标 是 卷 王 >>> kuai.le.xue.xi"
  2. print("原字符串:",str1)
  3. list1 = str1.split() #采用默认分隔符进行分割
  4. list2 = str1.split(">>>") #采用多个字符进行分割
  5. list3 = str1.split(".") #采用“.”号进行分割
  6. list4 = str1.split(" ",4) #采用空格进行分割,并且只分割前4个
  7. print(str(list1)+"\n"+str(list2)+"\n"+str(list3)+"\n"+str(list4))
  8. """
  9. 原字符串: 我 的 目 标 是 卷 王 >>> kuai.le.xue.xi
  10. ['我', '的', '目', '标', '是', '卷', '王', '>>>', 'kuai.le.xue.xi']
  11. ['我 的 目 标 是 卷 王 ', ' kuai.le.xue.xi']
  12. ['我 的 目 标 是 卷 王 >>> kuai', 'le', 'xue', 'xi']
  13. ['我', '的', '目', '标', '是 卷 王 >>> kuai.le.xue.xi']
  14. """
  • 2.4.2合并字符串:join()方法

语法:newstr = string.join(iterable)

将string加入到iterable后面

  1. str1 = "我的目标是卷王 "
  2. newstr = "@".join(str1)
  3. print(newstr) #>>>我@的@目@标@是@卷@王@
'
运行

2.5检索字符串

  • 2.5.1 count()方法--用于检索指定字符串在另一个字符串中出现的次数

语法:str.count(sub[,start[,end]])

str :原字符串

sub: 要检索的子字符串

start:起始位置的索引;end:结束位置的索引

  1. str1 = "我的目标是卷王 "
  2. newstr = "@".join(str1)
  3. print(newstr) #>>>我@的@目@标@是@卷@王@
  4. print(newstr.count("@") #>>>7
  5. print("字符串@符号首次出现的位置索引是:",newstr.find("@"))
  6. #>>>字符串@符号首次出现的位置索引是:1
  7. print("判断字符串是否以@符号开头:",newstr.startswith("@"))
  8. #>>>判断字符串是否以@符号开头:False
'
运行

  • 2.5.2 find()方法--检索是否包含指定的子字符串。若检索的字符串不存在则返回-1,否则返回首次出现该子字符串的索引

str.find(sub[,start[,end]])

注:若只想判断指定的字符串是否存在,则用关键字“in”。如:print("@"innewstr),若存在就返回True,否则返回False

  • 2.5.3 index()方法--与find()方法相似。只不过使用index()方法,当指定的字符串不存在时会抛出异常。

语法:str.index(sub[,start[,end]])

注:rindex()方法,作用与index()方法相似,只不过从右边开始查找

  • 2.5.4 startswith()方法--用于检索字符串是否以指定字符串开头。返回值为True/False

语法:str.startswith(sub[,start[,end]])

  • 2.5.5 endswith()方法--用于检索字符串是否以指定字符串结尾。返回值为True/False

语法:str.endswith(sub[,start[,end]])

2.6字母的大小写转换

str.lower()   ABC --> abc

str.upper()   abc --> ABC

2.7去除字符串中的空格和特殊字符

这里的特殊字符是指制表符\t、回车符\r、换行符\n等

  • 2.7.1  strip()方法--用于去掉字符串左右两侧的空格和特殊字符

语法:str.strip([chars])

chars: 可选参数,用于指定要去除的字符,可以指定多个

  1. str1 = " .@我爱卷.@.@. \n\r"
  2. print(str1.strip()) #>>>.@我爱卷.@.@. 去除字符串首尾的空格和特殊字符
  3. print(str1.strip(".")) #>>> .@我爱卷.@.@. 注:字符串首是一个空格
  4. str2 = ".@我爱卷.@.@."
  5. print(str2.strip(".")) #>>>@我爱卷.@.@
'
运行
  • 2.7.2  lstrip()方法--用于去掉字符串左侧的空格和特殊字符

语法:str.lstrip([chars])

  • 2.7.3 rstrip()方法--用于去掉字符串右侧的空格和特殊字符

语法:str.rstrip([chars])

2.8格式化字符串

  • 2.8.1 使用%操作符

语法:"%[-][+][0][m][.n]格式化字符"%exp

参数说明:

- :可选参数,用于指定左对齐,正数2,负数-2(例子啊!)

+ :可选参数,用于指定右对齐,正数+2,负数-2

0 :可选参数,表示右对齐,正数+2,负数-2,用0填充空白处(一般与m参数一起使用)

m :可选参数,表示占有宽度

.n : 可选参数,表示小数点后保留的位数

格式化字符:用于指定类型,其值如下:

%s --字符串(采用str()显示)   %r -- 字符串(采用repr()显示) %c -- 单个字符

%o -- 八进制整数   %d或者%i -- 十进制整数   %e / %E -- 指数(基底写e/E)

%x -- 十六进制整数    %f / %F -- 浮点数   %% -- 字符%

exp : 要转换的项

  1. tem = "编号:%09d\t公司名称: %s\t官网: http://www.%s.com" #定义模板
  2. contex = (7,"百度","baidu")
  3. print(tem % contex)
  4. #>>>编号:000000007 公司名称: 百度 官网: http://www.baidu.com
  5. #注:09代表右对齐,用0填充空白处,占位9个宽度 d表示%d,十进制整数 \t制表符
'
运行
  • 2.8.2 使用字符串对象的format()方法

语法:str.format(args)

str 用于指定字符串的显示样式(模板)用“{}”和“:”指定占位符,

格式:{[index][:[[fill]align][sign][#][width][.precision][type]]}

index : 可选参数,索引位置

fill:可选参数,用于指定空白处填充的字符

align:可选参数,用于指定对齐方式(值为“<”表示内容左对齐;“>”表示内容右对齐;“=”表示内容右对齐,将符号放在内容的最左侧,且只对数字类型有效;“^”表示内容居中对齐),需要配合width一起使用

sign:可选参数,用于指定有无符号数(值为“+”表示+2,-2;值为“-”表示2,-2;值为空格表示正数加空格,负数加负号)(这的2是举的例子)

#:可选参数,对于二、八、十六进制,若加上#表示会显示0b/0o/0x前缀,否则不显示

width:可选参数,表示占有宽度

.precision:可选参数,用于指定小数点后保留的位数

type:可选参数,用于指定类型,其值如下:

S -- 对字符串类型格式化   b -- 将十进制-->二进制表示再格式化

D -- 十进制整数   o -- 将十进制-->八进制表示再格式化

C -- 将十进制-->Unicode字符   x / X -- 将十进制-->十六进制表示再格式化

e / E -- 转换为科学计数法表示再格式化   f / F -- 转换为浮点数表示再格式化

g / G --自动在e和f或者E和F中切换    % -- 显示百分比

args用于指定要转换的项

https://blog.csdn.net/m0_73809176/article/details/127984059?spm=1001.2014.3001.5501

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/836752
推荐阅读
相关标签
  

闽ICP备14008679号