2020年4月8日 第四章 序列-1

第四章 序列-1

4.1 序列概述

4.2 字符串

4.3 列表

4.4 元组

4.1序列概述

  • Python中,根据容器的存储特点,操作方式,容器可以分为不同的类型,其中序列就是其中的一种内置的容器

  • 序列包括字符串,列表和元组

  • 序列类型的元素间存在顺序关系,各具体类型使用相同的索引体系,即正向索引和反向索引

  • 序列对象是可迭代的

  • 序列元素的索引

    ​ 反向从右侧索引-1开始,索引值递减

    ​ ←————————————————————————————————————

    索引 -5 -4 -3 -2 -1
    100 2.56 "Python" ['a','b'] (10,20)
    索引 0 1 2 3 4

    ​ ————————————————————————————————————→

    ​ 正向从左侧索引0开始,索引值递增

操作符或函数 描述
x in s 如果x是s的元素,返回True;否则返回False
x not in s 如果x不是s的元素,返回True;否则返回False
s+t 连接s和t,使之成为一个序列
s*n或n*s 将序列s复制n次
s[i] 返回序列的索引为i的元素
s[i:j:k] 返回包含序列s索引为i到索引为j(不包括j)以k为步长的子序列
len(s) 序列s的元素个数(长度)
min(s) 序列s中的最小元素
max(s) 序列s中的最大元素
s.index(x) 序列s中第一次出现元素x的位置
s.count(x) 序列s中出现x的总次数
all(s) 判定给定的序列类型s,如果s中的所有元素都是True,则返回True,否则返回False
any(s) 只要序列类型中任何一个元素是True,则返回True;若全部元素都是False,则返回False

需要注意,整数0,空字符串"",空列表[]等都被当作False

4.2 字符串

再识字符串

  • 定界符
  • 转义字符

字符串基本操作

  • 索引与切片
  • 运算符
  • 内置函数
  • 常用方法

字符串特殊应用

  • 字符串格式化

再识字符串

定义符

  • 字符串是一组不可变且有序的序列,其主要是用来表示文本信息。
  • 可以使用单引号、双引号、三引号(三个单引号或三个双引号)作为定界符对字符串进行定义。
>>> print('''蒹葭苍苍,白露为霜。
所谓伊人,在水一方。
溯洄从之,道阻且长。
溯游从之,宛在水中央。''')
> 输出效果
蒹葭苍苍,白露为霜。
所谓伊人,在水一方。
溯洄从之,道阻且长。
溯游从之,宛在水中央。

转义字符(特殊字符串)

思考如何输出?
I'm Mary
D:\one\two\tree\now

正确用法

>>> print("I'm Mary")
>>> print('I\'m Mary')
>>> print("D:\\one\\two\\tree\\now")
  • 转义字符是指在字符串中的某些特定的符号前加一个反斜杠之后,该字符将被解释为另外一种含义。
  • 如:print('I'm eva.')
转义 描述 转义 描述
\ 在行尾的续行符 \t 水平制表符
\' 单引号 \a 响铃
\" 双引号 \b 退格(Backspace)
\0 \\ 反斜线
\n 换行符 \0dd 八进制数,如\012代表换行
\r 回车符 \xhh 十六进制数,如\x0a代表换行

字符串表示小结

(1)

 print('Hello Python!')
 print("Hello World!")

(2)

>>> print('''蒹葭萋萋,白露未晞。
所谓伊人,在水之湄。''')
>>> print("""溯洄从之,道阻且跻。
溯游从之,宛在水中坻。""")

(3)

print('Let\'s go')
print("d:\\abc\\123")

字符串基本操作

字符串索引

正向索引 0 1 2 3 4
反向索引 -5 -4 -3 -2 -1

格式: <字符串或字符串变量>[索引]

>>> "温故而知新"[0]
'温'
>>> s1= "温故而知新"
>>> s1[3]
'知'
>>> s1[5]
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
str1[4]
IndexError: string index out of range
>>> "温故而知新"[-5] 
'温'
>>> s1= "温故而知新"
>>> s1[-2]
'知'
>>> s1[-6]
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
str1[-6]
IndexError: string index out of range

字符串切片

格式:<字符串或字符串变量>[start:end:step]

>>> s1= "温故而知新"
>>> s1[0:4:1]
'温故而知'
>>> s1[0:4:2]
'温而'
>>> s1= "温故而知新"
>>>print( s1[0:4:1])
温故而知
>>> print(s1[0:4:2])
温而
# 注意结果在形式上的区别
s1= "温故而知新"
#切片1 正着数
>>> s1[0:4]   #返回'温故而知's
# 切片2 负着数
>>> s1[-5:-3] #返回'温故's
# 切片3 省略数
>>> s1[:]  #返回'温故而知新'
>>> s1[1:]#返回'故而知新'
>>> s1[:-3]  #返回'温故's
# 切片4 跳着数
>>> s1[::2] #返回'温而新'
>>> s1[1:6:2]#返回'故知'
>>> s1[::-2]#返回'新而温'

字符串运算符

拼接运算符
>>> "温故而知新,"+ " 可以为师矣"
'温度而知新,可以为师矣'
>>> s1="中国女排"
>>> s2="夺冠"
>>> s3,s4=11,"连胜"
>>> print(s1+s2)
中国女排夺冠
>>> print(s1+str(s3)+s4+s2)
中国女排11连胜夺冠
复制运算符
>>> "Go"*3   #将返回由3个'Go'组成的新字符串
'GoGoGo '
>>>3*"Go"
'GoGoGo '
成员运算符
>>> "Python" in "I love Python"
True
>>> "Java " not  in " I love Python "
True
关系运算符

(1)单字符字符串的比较

>>>  "a">"A"   #返回 True
True
>>>  "0">"1"  #返回False
False

(2)多字符字符串的比较

>>> "Hello World!" >"Hello Python!"  
True
>>>"hello"<"hello world!"   
True
>>> ""<"a"   
True

字符串内置函数

  • 字符串函数操作是以字符串作为输入条件,经过处理后返回相应的值。
  • Python解释器提供了常见的字符串处理相关的内置函数,其调用形式为:<函数名> (<参数>)
    在此处插入表格
  • Unicode编码
  • Python 3以Unicode字符 为计数基础,中英文字符 及标点字符 都是1个长度单位。
  • Unicode又称万国码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等,Python字符串中每个字符 都使用Unicode编码表示。
  • ord(s) 返回单个字符表示的Unicode编码
  • chr(x) 返回Unicode编码对应的单个字符

【试一试】 读程序,写出程序的功能

#加密小助手
words=input("请输入一句话:")
new_words=""
for w in words:
  new_words+=chr(ord(w)+1)
print("new_words:",new_words)

程序运行结果
请输入一句话:I love 中国
new_words: J!mpwf!丮图

【试一试】 编写程序,输入一个字符串,将其中的小写英文字母变为它的下三个字母,即a变成d,b变成e,…..,z变成c,其它字符变为它的下一个字符。

words=input("请输入一句话:")
new_words=""
for w in words:
  if "a"<=w<"x":
   new_words+=chr(ord(w)+3)
 elif w=="x":
   new_words+="a"
 elif w=="y":
   new_words+="b"
 elif w=="z":
   new_words+="c"
 else:new_words+=chr(ord(w)+1)
print("new_words:",new_words)

程序运行结果
请输入一句话:我喜欢 Python
new_words: 戒喝欣!Qbwkrq

【例4-1】 凯撒密码

明文 密文
DOT GRW
DOTY GRWB
如果原文字符是P,其密文字符C,满足如下条件:
加密:C=(P+3)mod 26
解密:P=(C-3) mod 26

#凯撒密码加密.py
plaintext=input("请输入明文:")
for p in plaintext.lower():  #将明文转换成小写字符,遍历每一个字符
  if "a"<=p<="z":
    print(chr((ord(p)+3-ord("a"))%26+ord("a")),end="")
  else:
    print(p,end='')

字符串的常用方法

  • 字符串方法是对字符串进行处理的一个过程,由方法名和用圆括号括起来的参数列表组成。
  • Python中,字符串对象有大量自己特定的方法,可用于查找、检测、排版、替换等操作。
  • 字符串内置方法众多,根据功能不同,把常用方法从转换、判断、填充、查找、连接与分割等几个方面分类介绍。

格式:<字符串或字符串变量>.<方法名>([<参数1,参数2….>] )

【1】转换方法
方法 例子 描述
upper s.upper() 'MY NAME IS EVA' 全部字符大写
lower s.lower() 'my name is eva' 全部字符小写
swapcase s.swapcase() 'mY NAME IS eVA' 字符大小写互换
capitalize s.capitalize() 'My name is eva' 串首字母大写,其余小写
title s.title() 'My Name Is Eva' 单词首字母大写,其余小写
>>> s1="A journey of a thousand miles begins with single step."
>>> s1.upper()  #将全部字符转换为大写
'A JOURNEY OF A THOUSAND MILES BEGINS WITH SINGLE STEP.'
>>> s1.lower() #将全部字符转换为小写
'a journey of a thousand miles begins with single step.'
>>> s1.title() #所有单词首字母大写,其余小写
'A Journey Of A Thousand Miles Begins With Single Step.'
>>> s1.capitalize()   #将字符串的第一个字符转换为大写字符,其余小写
'A journey of a thousand miles begins with single step.'
>>> s1.swapcase()#将字符串中大小写字符互换
'a JOURNEY OF A THOUSAND MILES BEGINS WITH SINGLE STEP.'
【2】判断方法
方法 例子 描述
isalnum s.isalnum() True 全是字母或数字,返回True
isalpha s.isalpha() False 全是字母,返回True
isdigit s.isdigit() False 全是数字,返回True
islower s.islower() True 有区分大小写字符,且全是小写,返回True
isupper s.isupper() False 有区分大小写字符,且全是大写,返回True
istitle s.istitle() False 首字母为大写字母,返回True
isspace s.isspace() False 全是空白字符,返回True
isprintable s.isprintable() True 全是可打印字符,返回True
>>> "你好JACK!".isupper( )  #判断字符串中所有的字母是否都为大写
True
>>> "你好JACK!".islower( )  #判断字符串中所有的字母是否都为小写
False
>>>  "你好JACK!".isalpha()  #判断一个字符串是否只包含字母或汉字,如果是返回True,否则返回False.
False
>>> "10086".isdigit()   #判断一个字符串是否只包含数字
True
>>> "中国移动10086".isalnum( )   # 判断一个字符串是否全部由字母、汉字或数字组成
True
>>>  "China Mobile".istitle()  #判断字符串中的所有单词是否都是首字母大写
True
【3】查找方法

S="123,abc,123,abc"

方法 例子 结果 描述
find s.find("123",1,7)
s.find("ab")
-1
4
范围内查找子串,返回首次出现位置,找不着返回-1
rfind s.rfind("23",1,13)
s.rfind("123")
9
12
范围内查找子串,返回末次出现位置,找不着返回-1
index s.index("123",1,7)
s.index("123")
出错
0
范围内查找子串,返回首次出现位置,找不着报错
count s.count(",")
s.count("234")
3
0
返回子字符串在字符串中出现的次数
replace s.replace("123","456")
s.replace("a","4",1)
'456,abc,456,abc'
'123,4bc,123,abc'
查找子串并在次数范围内用制定字符串替代,返回新串
startswith s.startwith("12")
s.startwith("12",9)
True
False
如果范围字符串以指定子串开始,返回True
endswith s.endswith("3",1,11)
s.endwith("23")
True
False
如果范围字符串以指定子串结束,返回True
s1="A journey of a thousand miles begins with single step."
>>> s1.count("th")  #返回子串"th"在字符串s1中指定的区间内出现的次数
2
>>> s1.count("th",10,20) #返回子串"th"在字符串s1的索引序号10到20(不包括)间出现的次数
1
s1="A journey of a thousand miles begins with single step."
>>>  s1.find("th")#在s1中查找子串"th",返回第一次出现"th"的索引序号
15
>>>  s1.find("th",10,35)#在指定的区间内查找子串"th",返回"th"首次出现的索引序号
15
>>> s1.find("our",9,20) #在指定的范围内查找子串"our",若没有找到子串,返回-1.
-1
s1="A journey of a thousand miles begins with single step."
>>> s1.index("our")#在s1中查找子串"our",返回第一次出现"our"的索引序号
3
>>>  s1.index("our",9,20)   #在指定的范围内查找子串"our",若没找到会产生异常
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
s1.index("our",9,20)
ValueError: substring not found
s1="A journey of a thousand miles begins with single step."
>>>  s1.strartswith("A")  #返回字符串s1是否以"A"开头
True
>>>   s1.startswith("our",9,20) #在索引区间[9,20] 内的子串若以our开头,则返回True,否则返回False
False
>>>  s1.endswith("our",0,6) #在指定区间内的子串若以our结尾,则返回True,否则返回False
True
>>>  s2="aabbaaccaa"
>>> s2.replace("aa","#") #将s2中所有的子串"aa" 替换为"#"
'#bb#cc#'
>>> s2.replace("aa","#",2)  #将s2中前两个子串"aa" 替换为"#"
'#bb#ccaa'
【4】连接与分割方法
方法 描述
join 用指定字符连接字符串或列表
split 以指定字符为分割符,分割成多个字符串,返回包含分割结果的列表
>>>  "-".join("1234")   #用"-"连接字符串"1234"
'1-2-3-4'
>>> ".".join(["www" ,"lnu", "edu","cn"])   #用"."连接列表中的字符串
'www.lnu.edu.cn'
>>> "abc123@163.com".split("@")  #以指定字符@作为分隔符,返回包含分
['abc123', '163.com']   割结果的列表
>>>  "www.sohu.com".split(".") 
['www', 'sohu', 'com']
>>> "www.sohu.com".split(".",1)  #将字符串以.作为分隔符,分割1次
['www', 'sohu.com']
>>>  "www.sohu.com".split(".",2)
['www', 'sohu', 'com']
#若没有指定分隔符,将以空白字符(空格,\n,\r,\t)分割字符串
>>> "A journey of a thousand miles begins with single step".split()
 ['A', 'journey', 'of', 'a', 'thousand', 'miles', 'begins', 'with', 'single', 'step']
>>>  "hello\nworld!".split()
 ['hello', 'world!']
【5】修剪(格式)方法

S="123,abc,123,abc"

方法 描述
center 返回指定长度的居中对齐字符串副本
ljust 返回指定长度的左对齐字符串副本
rjust 返回指定长度的右对齐字符串副本
zfill 返回指定宽度字符串不足左侧用0补位
strip 删除两边空白字符或指定字符
lstrip 删除左边空白字符或指定字符
rstrip 删除右边空白字符或指定字符
>>> "abc hello ab".strip("ab")  #删除字符串两边的子串"ab"
'c hello '
>>>  "  abc  123  ".strip()   #删除字符串两边的空白字符(空格)
'abc  123'
>>> "\nabc hello ab\n\r".strip()#删除字符串两边的空白字符(\n,\r)
'abc hello ab'

字符串特殊应用

字符串的格式化—format方法

输出的格式:
你好,____,你得到了____分

输出的内容:
你好,张小小,你得到了95
你好,李云鹏,你得到了120
你好,陈山山,你得到了215

格式:<模板字符串>.format(<参数1,参数2……>)

>>> "my {} is {}".format("name","eva")
  • format( )方法可以有一个或多个类型不同的对象参数。
  • format( )方法执行时,首先进行对象参数与模板字段项的匹配,然后将每个对象参数,按照所匹配的模板字段指定格式转换为字符串,并替换所匹配的模板,返回一个被替换后的字符串。
# { }—位置匹配,不带序号,按顺序填充
>>> print("name is {},id is{}".format("王小瞳","190101"))
name is 王小瞳,id is 190101
# {0},{1}—序号匹配,可调换顺序
>>> print("name is {0},id is{1}".format("王小瞳","190101"))
name is 王小瞳,id is 190101
>>> print("name is {1},id is{0},{1}是计算机专业的学生".format("190101","王小瞳"))
name is 王小瞳,id is 190101,王小瞳是计算机专业的学生
# {name}、{id}—名称匹配,带关键字填充
>>> print("name is {name},id is{id}".format(name="王小瞳",id="190101"))
name is 王小瞳,id is 190101
# {0[0]},{0[1]}—索引下标匹配
>>> print("name is {0[0]},id is{0[1]}".format(["王小瞳","190101"]))
name is 王小瞳,id is190101
  • 使用format方法时,在{ }内除了包含参数或参数序号外,还可以包含格式控制信息,用来控制参数显示时的格式,二者中间用冒号隔开。
    格式:{[<参数>|<参数序号>]: <格式控制标记>}
>>> print("我爱你,{:>4}".format("中国"))
我爱你,  中国
>>> print("{0},{0:^4},壮丽的{1:>3}".format("中国","山河"))
中国, 中国 ,壮丽的  山河

{[<参数>|<参数序号>]: <格式控制标记>}

: <填充> <对齐> <宽度> <,> <精度> <类型>
引导符号 用于填充的单个字符,默认为空格 <左对齐
>右对齐
^居中对齐
设置输出宽度 数字的千位分隔符,适用于整数和浮点数 浮点数小数部分的精度或字符串的最大输出长度 整数类型b.c.d.e.x.X
浮点数类型e.E.f.%
>>> print("name is {},id is {:#>8},score is {:>5.1f}".format("王小瞳","190101",98.69))
name is 王小瞳,id is ##190101,score is 98.7

format方法的优势

(1)无需理会填充数据的数据类型问题
(2)单个参数可以多次输出,参数顺序可以不相同
(3)填充方式十分灵活,对齐方式十分强大

【例4-2】下面输出的是前三名同学的成绩排名

#E4-2.py
print("{0:*^30}".format("score ranking"))
print("{0:<5}{1:^20}{2:>5}".format("id","name","score"))
print("{0:<5}{1:^20}{2:>5}".format(1,"eva",100))
print("{0:<5}{1:^20}{2:>5}".format(2,"coco",98))
print("{0:<5}{1:^20}{2:>5}".format(3,"fanny",95))

程序的运行结果为:
********score ranking*********
id name score
1 eva 100
2 coco 98
3 fanny 95

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,226评论 0 4
  • # Python关键字 部分单词没有分类整理按照顺序整理的 ``` statements语句 print输出 qu...
    ZhouLang阅读 587评论 0 0
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,167评论 0 3
  • 在很久的以前和以后 森林里有一条长颈鹿大道 路过那里的动物们 都伸长了脖子看着远方 它们活在对未来的期许中 磕...
    影倒手右阅读 4,951评论 0 7