1. 概述
今天我们要补充一下字符串和列表的相关内容。加粗体代表我们已经介绍的内容,斜体代表新增内容。计算机编程的原理简要介绍
集成开发环境PyCharm
变量名、数字、字符串、列表
句式
输入和输出
条件判断语句
循环语句
注释
函数
模块和引入
各类数据结构
2. 转义字符
何为转义字符?在我们打代码时,有些格式的字符我们并不能打出来,比如另起一行、回车键,或者是单双引号等等。我们来通过具体例子看一下为什么我们需要转义字符。
print(""Time is money." - Benjamin Franklin")
在编译器编译这行代码时,它会寻找两个引号之间的内容。我们需要它最后显示的文字是:
"Time is money."- Benjamin Franklin
很显然文本里本来就要有的引号,和表示这段文字是字符串的引号交错着排列,迷惑了编译器。那么如何告诉编译器这个引号是属于这个文本的一个字符呢?
\":表示的是双引号
\':表示的是单引号
\n:换行
\t:横向制符表,也就是tab
\\:表示的是后斜杠
具体应用看这里:
print("\"Time is money.\"- Benjamin Franklin")
print('\'Time is money.\'- Benjamin Franklin')
print("This is the first line.\nThis is another line.")
print("\tThis is after the tab.")
print("Just to print out backslash\\")
运行结果:
"Time is money." - Benjamin Franklin
'Time is money.' - Benjamin Franklin
This is the first line.
This is another line.
This is after the tab.
Just to print out backslash \
其实在Python字符串中,如果你习惯使用双引号,而双引号里不会再出现其他双引号,你可以直接使用单引号符号,没有必要打后斜杠。反之亦然,如果你习惯用单引号括起字符串,而里面没有其他单引号,可以省去后斜杠直接用双引号符号。
print("\"Time is money.\"- Benjamin Franklin")
print('"Time is money." - Benjamin Franklin')
但是我个人还是建议大家但凡碰到引号作为字符的,还是用转义字符比较安全、保险,因为如果以后碰到需要添加文本内容或者修改代码格式,事先用好转义字符会避免不必要的麻烦。
3. 切片
首先何为切片,切片这名字听着像是在切豆腐,但是其实我们已经接触过切片了,也就是字符串、列表等一串东西的截取。
code = "ABCD-1234-WXYZ-9876"
print(code[1:3]) #BC
然而我们在这里再补充一个,
var_name[from:to:step]
我们添加了一个冒号,后面加上一个数字step,表示每隔几个截取一下。这么说有点玄乎,看一下例子:
code = "Aa-Bb-Cc-Dd-Ee-Ff-Gg"
print(code[3:14:3]) #BCDE
我们从下标为3(第四个)的字符上,也就是B开始,每3个字符截取一下,一直截到第十四个字符(下标为14-1=13),也就是小写的e。输出的字符串第一个是B,接下来,我们就直接+3,截取下标为6的字符,C,再+3截取D,再+3截取E,再+3时下标已经超过e所在的位置了,所以停止。最后输出BCDE。
大家可以玩一玩,对于列表来说也是一样的,下面给大家看几个例子:
list_number = [0, 1, 2, 3, 4, 5, 6, 7]
list_even = list_number[::2]
list_odd = list_number[1::2]
print(list_even) #[0, 2, 4, 6]
print(list_odd) #[1, 3, 5, 7]
我们也说过了,如果冒号上没填数字,就是默认值,头下标没填就是从开头截取,尾下标没填就是截至最后,第三个数字(第二个冒号后的数字)空着,也就是默认间隔,为1,即在头下标到尾下标之间每个字符都要。
list_number = [0, 1, 2, 3, 4, 5, 6, 7]
#接下来三个list都长得一样
list_a = list_number[1:6]
list_b = list_number[1:6:]
list_c = list_number[1:6:1]
print(list_a, list_b, list_c)
#[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
那么如果我们间隔是负数会是什么样呢?
list_number = [0, 1, 2, 3, 4, 5, 6, 7]
list_partial_backward = list_number[6:1:-1]
print(list_partial_backward) #[6, 5, 4, 3, 2]
我们可以看到头下标比尾下标靠后,即从下标为6的数,倒着截,间隔为1,截至下标为头下标+1的数,也就是2这里。
如果我们非要调皮,想要头下标比尾下标靠前:
list_naughty = list_number[1:6:-1]
这样截取出来的是个空列表(但不报错),我们先要从前往后截取,又要从后往前截取,指示本就不明确,结果肯定什么也没有。
当然这里的头尾下标我们都能用负数下标。
4. 列表的reverse函数
对于列表,我们有一个reverse,反转函数。顾名思义,就是把这个列表倒过来排序,切片中也有类似运用,该切片也可以应用至字符串中:
list_number = [0, 1, 2, 3, 4, 5, 6, 7]
list_backward = list_number[::-1]
print(list_backward) #[7, 6, 5, 4, 3, 2, 1, 0]
使用[::-1]就能实现把整个列表反着截取。这里头尾下标缺失,Python看到间隔是-1就默认是从最后倒着截到最前。
那么我们还提及过reverse函数,它和这个切片之间有什么区别呢?
首先,切片只是截取字符串或者列表,截取的目的是按照某个顺序(正向、反向、间隔)复制下一个片段的数据,这个片段可以是整个。既然是复制下来的,那么原本的列表或字符串就不会变。另外,改变原来列表的数据不会对切片数据产生影响(这个要到很后面才介绍,浅拷贝和深拷贝)。
但是在列表中,我们有个reverse函数,它是直接把原来的数据反了一下,具体看:
list_number = [0, 1, 2, 3, 4, 5, 6, 7]
list_number.reverse()
print(list_number) #[7, 6, 5, 4, 3, 2, 1, 0]
reverse函数的作用是把原来的列表直接反着排序,原来的列表就被硬生生改掉了。因为reverse是个内部函数,我们并不能把list_number.reverse()这一行作为一个新列表赋值给其他变量。
今天的内容就当是对前面内容的小补充,会对以后的代码有帮助。