文章目录
1_序列list、tuple、str的通用操作
#判断某值是否在序列中,在则返回True,否则返回False
lst = [-0.5,-2,3.5,4,('good')]
a,b = -2,('good')
print(a in lst)
print(b in lst)
# "+":连接两个序列; "*":重复序列
tup1 = (1,[2,3])
tup2 = ('a','b',('c','d'))
print(tup1+tup2)
print(tup1*3,tup2*2)
(1, [2, 3], 'a', 'b', ('c', 'd'))
(1, [2, 3], 1, [2, 3], 1, [2, 3]) ('a', 'b', ('c', 'd'), 'a', 'b', ('c', 'd'))
# 下标索引:索引从0开始,访问不能越界,特别注意,索引-1代表序列中最后一个元素
lst = [1,'Hello',3,' World!!!',5,[6,7],8.95]
print(lst[2],lst[5]) # lst[2]中,下标索引是2,指向lst的第3个值
print(type(lst[1]),type(lst[5]))
print(lst[-1])
3 [6, 7]
<class 'str'> <class 'list'>
8.95
# 切片:获取序列的区间中个元素值。特别注意,它是一个左闭右开区间[ )。
tup = (1,'Hello',3,' World!!!',5,6,7,8.95)
print(tup[2:6]) # 索引2的值 - 索引5的值
print(tup[:5]) # 左边索引不带标记,表示从索引0开始
print(tup[4:]) # 右边索引不带标记,表示以最后一个值结束
print(tup[5:-1]) # 索引号5的元素值 - 序列中倒数第二个值。因为右是开区间
print(type(tup[0]),type(tup[:2]))#经常记得用type查看数据类型
str1='*'
print(str1[0:2])
(3, ' World!!!', 5, 6)
(1, 'Hello', 3, ' World!!!', 5)
(5, 6, 7, 8.95)
(6, 7)
<class 'int'> <class 'tuple'>
中华
# 步长:序列[i:j:n]表示索引i - 索引j,以n为步长的序列值
tup = (0,1,2,3,4,5,6,7,8,9)
print(tup[::2]) # 以2为步长,从索引号0 - 序列尾的元素值
print(tup[1::2])# 以2为步长,从索引号1 - 序列尾的元素值
(0, 2, 4, 6, 8)
(1, 3, 5, 7, 9)
# 序列基本内置全局函数
tup = (1,'Hello',3,' World!!!',[5,6,7],8.95,3)
print(len(tup)) # 序列元素个数
print(tup.count(' World!!!'))#.count(obj)方法:计算obj在序列中的出现次数
print(tup.count(5))
print(tup.count([5,6,7]))
print(tup.index(3)) # .index(obj)方法:返回序列中obj第一个匹配项的索引位置。如果序列中无匹配项,则出错
lst = [1,2,3,4,5,6,7,8,9,0]
print(max(lst),min(lst),sum(lst)) # 返回序列中的最大值、最小值及和。注意,这三个函数仅对数字序列有效
str1='''
*(the People's *),简称“中国”,成立于1949年10月1日 ,
位于亚洲东部,太平洋西岸,是工人阶级领导的、以工农联盟为基础的人民**的*国家,
以五星红旗为国旗、《义勇军进行曲》为国歌,国徽内容为国旗、*、齿轮和麦稻穗,
通用语言文字是普通话和规范汉字,首都北京,
是一个以汉族为主体、56个民族共同组成的统一的多民族国家。
我爱*,I love China!!!
'''
print(len(str1))
print(str1.count('*'))
print(str1.index('国徽'))
print(str1[str1.index('国徽'):str1.index('国徽')+2])
7
1
0
1
2
9 0 45
294
2
155
国徽
Quiz:
(1)x=[3,2,1,1,[1,2,3],[1,1]],请问x.count(1)为多少?
(2)y=[50,67,50,50,500,212,100],请问y.index(50)等于多少?
(3)以上例字符串str1为参考,挑选出1949,并用type函数判断其数据类型。
2_ list与tuple的常用操作
# 列表的特征
lst1 = [1,2,3,'a','b','c',[1,2,3]]
print(lst1[-1],lst1[4:],lst1[::2])
lst2 =[[1,2,3],[4,5,6]]
lst2 = lst2 * 3 # 可随意变换列表长度,相当于随意指定新的列表
print(lst2)
lst3 = ['A',100,[1,2]]
lst3[0] = 10 #可以原位改变任何类型值
lst3[1] = "good"
lst3[2] = '(1,2)'
print(lst3)
[1, 2, 3] ['b', 'c', [1, 2, 3]] [1, 3, 'b', [1, 2, 3]]
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
[10, 'good', '(1,2)']
# 列表与生成器
print(range(5),type(range(5)))
print(range(5)[2],type(range(5)[2])) #可访问range中的特定元素,元素类型为int
print(range(5)[:4]) #切片数据类型是range
# range语法:range(start, stop[, step])
# start: 从 start 开始计数。默认是从 0 开始。例如range(5)等价于range(0, 5);
# stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
# step:步长,默认为1。例如:range(0, 5)等价于 range(0, 5, 1)
lst = list(range(5)) # 通过list()函数生成列表
print(lst)
range(0, 5) <class 'range'>
2 <class 'int'>
range(0, 4)
[0, 1, 2, 3, 4]
# 列表list常用方法操作 - 添加元素
#listname.append(object) :向列表中添加一个对象object
#listname.extend(sequence) :向列表中添加一个序列sequence的内容
music_media = ['compact disc', '8-track tape', 'long playing record']
new_media = ['DVD Audio disc', 'Super Audio CD']
music_media.append(new_media)
print('使用append方法添加后的结果为:%s'% music_media)
music_media = ['compact disc', '8-track tape', 'long playing record']
new_media = ['DVD Audio disc', 'Super Audio CD']
music_media.extend(new_media)
print('使用extend方法添加后的结果为:%s'% music_media)
使用append方法添加后的结果为:['compact disc', '8-track tape', 'long playing record', ['DVD Audio disc', 'Super Audio CD']]
使用extend方法添加后的结果为:['compact disc', '8-track tape', 'long playing record', 'DVD Audio disc', 'Super Audio CD']
# 列表list常用方法操作 - 删除元素
#listname.remove(value):根据元素值进行删除,且只会删除第一个和指定值value相同的元素,而且必须保证该元素是存在的,否则会引发 ValueError 错误。
#listname.clear():删除列表所有元素
#listname.pop(index):根据索引值index删除元素。如果省略 index 参数,默认删除列表中的最后一个元素,类似于数据结构中的“出栈”操作。
lst = ["Python", 'R',"C++", "Java", "PHP", "Ruby", "MATLAB","R"]
lst.remove('R') #remove可以拿来用
print(lst)
lst = ["Python", 'R',"C++", "Java", "PHP", "Ruby", "MATLAB","R"]
lst.pop() #删除lst中'R'元素, pop可以拿来用
print(lst)
lst = ["Python", 'R',"C++", "Java", "PHP", "Ruby", "MATLAB","R"]
lst.pop(2) #删除lst中'C++'元素
print(lst)
del lst[0] #del删除不得用于别处
print(lst)
lst.clear() # 清除所有值
print(lst)
# 删除元素还有del语句,它可以使用切片方式删除多个元素,请同学们自己测试此语句功能
['Python', 'C++', 'Java', 'PHP', 'Ruby', 'MATLAB', 'R']
['Python', 'R', 'C++', 'Java', 'PHP', 'Ruby', 'MATLAB']
['Python', 'R', 'Java', 'PHP', 'Ruby', 'MATLAB', 'R']
['R', 'Java', 'PHP', 'Ruby', 'MATLAB', 'R']
[]
# 列表list常用操作 - 插入元素
#listname.insert(position,x):在指定位置前插入对象x
lst = list(range(10))
print(lst)
lst.insert(3,'a')
print(lst)
lst = list(range(10))
lst.insert(3,[1,2,3])
print(lst)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 'a', 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, [1, 2, 3], 3, 4, 5, 6, 7, 8, 9]
# 列表list常用操作 - 修改及查找元素
lst = list(range(10))
print(lst)
lst[2]='abc'
lst[3]=('a','b','c')
print(lst)
print(lst.index('abc'))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 'abc', ('a', 'b', 'c'), 4, 5, 6, 7, 8, 9]
2
# 列表list常用操作 - 复制
lst = list(range(10))
lst1 = lst
print(lst,lst1)
lst1[2] = 'good'
print(lst,lst1)
# lst,lst1指向的是同一个列表
lst = list(range(10))
lst2 = lst.copy()
print(lst,lst2)
lst2[2] = 'good'
print(lst,lst2)
# listname.copy()方法:复制并生成一个新的列表,lst,lst2指向的是两个列表。
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 'good', 3, 4, 5, 6, 7, 8, 9] [0, 1, 'good', 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 'good', 3, 4, 5, 6, 7, 8, 9]
# 列表list常用操作 - 排序
lst1 = list(range(10))
lst2 = ["agx", "agh", "abc"]
lst1.sort(reverse=True) # 参数reverse:反向排序,针对数字
print(lst1)
lst2.sort()
print(lst2)
# 默认升序排序/字母顺序
lst2 = ["xyz", "thj", "bcd"]
print(sorted(lst2))
print(lst2)
# 函数sorted():排序不复制
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
['abc', 'agh', 'agx']
['bcd', 'thj', 'xyz']
['xyz', 'thj', 'bcd']
#遍历列表中的索引及其对应的元素
sports=['篮球','兵乓球','羽毛球','足球']
for index, item in enumerate(sports):
print(index, item)
0 篮球
1 兵乓球
2 羽毛球
3 足球
#列表推导式:使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表
#格式:[exp for item in collection if condition]
lst1 = [ x*2 for x in range(10) if x>=2]
print(lst1)
list3 = []
for x in range(10):
if x>=2:
list3.append(x*2)
print(list3)
lst2 = [ x for x in range(100) if x % 3==0 and x>=60]
print(lst2)
[4, 6, 8, 10, 12, 14, 16, 18]
[4, 6, 8, 10, 12, 14, 16, 18]
[60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
# tuple :不可变的“列表”,虽不可变,但仍满足序列的通用操作
tup1 = ('Java', 'Python', "C++",2022, 2019)
tup2 = (1, 2, 3, 4, 5)
tup3 = "a", "b", "c", "d" # 可以不加括号
tup4 = (100,) # 元组中只包含一个元素时,需要在元素后面添加逗号
print(len(tup1))
print(tup1 + tup2)
print(tup3+tup4 * 2)
print(max(tup2),min(tup2))
# 序列通用函数
str1 = "Good Morning"
tup5 = tuple(str1) # tuple()函数:将str转换为元组,也可以将将list转换为元组
print(tup5)
#tup1[1] = "Ruby" # 注意:此语句有错,因为tuple不可变
5
('Java', 'Python', 'C++', 2022, 2019, 1, 2, 3, 4, 5)
('a', 'b', 'c', 'd', 100, 100)
5 1
('G', 'o', 'o', 'd', ' ', 'M', 'o', 'r', 'n', 'i', 'n', 'g')
Quiz:
(1)range()生成的是不是都是整数? 不是
(2)x=range(4:8), x=range(4,8),哪种方式书写正确? 后者正确
(3)m=range(10),请问m[2],m[-1],m[5:8]是多少?
(1)分别用append、extend方法,给一个序列增加三个元素'a'
(2) list.append('abc')和list.extend('abc')的区别
(3) 创建某一列表,在列表中间进行插入、删除、查找一个值
(4)创建一个随机数值列表,按照降序排列
(5)sort()和sorted()什么区别
(6)使用range生成列表,并使用列表推导式,找出大于10的数字,存入列表
3_str的常用操作与正则表达式
# 字符串引号
str1 = "123"
str2 = '123'
str3 = '"Good Morning"' # 文本中有引号的时候要相互交替使用
str4 = '''
*(the People's *),简称“中国”,成立于1949年10月1日 ,
位于亚洲东部,太平洋西岸,是工人阶级领导的、以工农联盟为基础的人民**的*国家,
以五星红旗为国旗、《义勇军进行曲》为国歌,国徽内容为国旗、*、齿轮和麦稻穗,
通用语言文字是普通话和规范汉字,首都北京,
是一个以汉族为主体、56个民族共同组成的统一的多民族国家。
我爱*,I love China!!!
'''
# 三引号 ''' ''',""" """三引号允许一个字符串跨多行,每行后有回车符‘\n’
# 转义字符:\
print('\'', '\"') # \',\" :分别输出单引号,双引号
print('Hello\nWorld!!!') # \n:空行
print('\\') # 输出\,文件路径用“/”或者“\\”
print(r'\\') #不输出转义字符,前面加r
' "
Hello
World!!!
\
\\
# 字符串常用操作
st1 = 'one two one two one'
st2 = st1.replace('one','three',2)
print(st1)
print(st2)
# str.replace(old,new,count):修改字符串,count:从开始位置起更换的个数,省略count,表示全替换
#.find(str, beg=0, end=len(string)):如果指定 beg(开始) 和 end(结束) 范围,检查是否包含在指定范围内,是返回开始的索引值,否则返回-1。
print(st1.find('two'))
st1 = "http://www.xinhuanet.com/politics/xxjxs/index.htm"
lst = st1.split('/')
print(st1)
print(lst)
# str.split(obj):拆分字符串,生成列表
m = '/'
st = m.join(lst)
print(st)
# str.join(obj):连接字符串,对象为序列
st = 'I love China!'
print(st.startswith('I'), st.endswith('a!'))
# str.startswith(“str”) 判断是否以“str”开头;str.endswith (“str”) 判断是否以“str”结尾
st = 'I love China!'
print(st.upper()) # 全部大写
print(st.lower()) # 全部小写
print(st.swapcase()) # 大小写互换
print(st.capitalize()) # 首字母大写
st = '0123456789'
print(st.isnumeric()) # 如果 string 只包含数字则返回 True,否则返回 False.
st = 'abcABC123'
print(st.isalpha()) # 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
#请同学们自己测试isalnum(),isalpha(),isdigit(),isspace(),islower(),isupper(),istitle()的使用方法
st = ' avd '
print(st.rstrip()) # 删除字符末尾的空格
print(st.lstrip()) # 删除字符末尾的空格
print(len(st)) # st没有改变
print(len(st.strip())) # 删除字符首末尾的空格
st1 = '#UNSG @ NY Society for Ethical Culture bit.ly/2guVelr @UN @UN_Women'
st2 = st1.split(' ')
print(st2,type(st2))
st3=[w for w in st2 if w.startswith('#')] # 查找以#开头的文本
print(st3,type(st3))
st4=[w for w in st2 if w.startswith('@')] # 查找以@开头的文本
print(st4)
one two one two one
three two three two one
4
http://www.xinhuanet.com/politics/xxjxs/index.htm
['http:', '', 'www.xinhuanet.com', 'politics', 'xxjxs', 'index.htm']
http://www.xinhuanet.com/politics/xxjxs/index.htm
True True
I LOVE CHINA!
i love china!
i LOVE cHINA!
I love china!
True
False
avd
avd
7
3
['#UNSG', '@', 'NY', 'Society', 'for', 'Ethical', 'Culture', 'bit.ly/2guVelr', '@UN', '@UN_Women'] <class 'list'>
['#UNSG'] <class 'list'>
['@', '@UN', '@UN_Women']
# 格式化字符:在字符串中插入变量
name = "小张"
age=20
print( "%s年龄为:%i岁." % (name,age))
# %s:表示在字符串中插入一个字符串变量,%i表示在字符串中插入一个整型变量。%(name,age)分别代表其值
a, c = 100.655, 100.655
b = 452.3456
print("a = %.2f, b = %.3f, c = -%i" % (a, b,c))
# %f代表插入字符串的源数据类型:浮点型
d = 3.1415926*100
print("d = %.2e" % d)
print("d = %.3E" % d)
# 科学计数法: %e, %E
e1 = 31415926535897932384626
e2 = 3.14
print("e1 = %g" % e1)
print("e2 = %g" % e2)
# 小数位数少的时候自动用浮点数表示,数据大的时候自动识用用科学计数法
小张年龄为:20岁.
a = 100.66, b = 452.346, c = -100
d = 3.14e+02
d = 3.142E+02
e1 = 3.14159e+22
e2 = 3.14
# 正则表达式:Python处理字符串的强大工具,详细使用方法请参阅官方文档https://docs.python.org/zh-cn/3.8/library/re.html
# 需引入模块re,即import re
# 常用方法:re.match(pattern, string, flags=0);re.search(pattern, string, flag=0);re.findall(pattern, string [,flags])
# 常用属性:re.I: 匹配不分大小写
# compile()方法:compile(pattern, flag=0),编译正则表达式pattern,然后返回一个正则表达式对象。
# match(pattern, string, flags=0),它尝试从字符串string的起始位置匹配一个模式pattern,如果不是起始位置匹配成功的话,match() 就返回 none。
# search(pattern, string, flag=0):不从最开始匹配的,而是从任意位置查找第一次匹配的内容。如果没有匹配成功,返回None,否则返回匹配对象。
# findall(pattern, string [,flags]):查找string中出现的所有正则表达式pattern,并返回一个匹配列表,如果没匹配部分,则返回一个空列表。
#常用的匹配对象方法:group()、groups()
import re #使用正则表达式需要引用re
st1 = '#UNSG @ NY Society for Ethical Culture bit.ly/2guVelr @UN2a @UN_Women'
st2 = re.search('@[A-Za-z0-9]+', st1)
st3 = re.match('@[A-Za-z0-9]+', st1)
print(st2)
zprint(st3)
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.I)
if matchObj:
print( "matchObj.group() : ", matchObj.group()) #返回整个的匹配对象
print( "matchObj.groups() : ", matchObj.groups()) #返回一个含有所有匹配组的元组,匹配失败返回空元组
print( "matchObj.group(1) : ", matchObj.group(1)) #返回指定分组的匹配对象
print( "matchObj.group(2) : ", matchObj.group(2),type(matchObj.group(2)))
else:
print("No match!!")
<re.Match object; span=(54, 59), match='@UN2a'>
None
matchObj.group() : Cats are smarter than dogs
matchObj.groups() : ('Cats', 'smarter')
matchObj.group(1) : Cats
matchObj.group(2) : smarter <class 'str'>
Quiz:
(1)以下语句输出值分别是多少:33+"22"; 33+int("22"); "22" + str(55);
(2).split和.join的输出分别是什么类型的数据?
(3)import re str = 'abcdabcdef ' pattern ='.*?' p = re.compile(pattern) match = re.search(p, str) print(match.group(0))
分析其运行结果。