写在前面
疫情突然降临湖北,欢天喜地的节日气氛变得安静,这几天在家总想学点新东西,由于我学的硬件部分的内容更多,并且有C语言基础,所以决定学习Python这样一个发展前景大、简单实用的语言。
借助廖雪峰的在线学习网站和 《Python编程:从入门到实践》 (非恰饭,勿喷),在刚开始的两天中,懒懒散散地学习了Python作为一个语言所需要掌握的基本语法,并且简单了解了list
、tuple
、dict
和set
这四种数据结构,下列为学习笔记
变量和两种简单数据类型
和学习C语言时一样,上来先得学的是数据类型和变量( 其实学C的时候开始老师先讲了编译原理)
1. 变量
- 变量名只能包含字母、数字和下划线。变量名可以字母或者下划线开头,但不能以数字开头
- 变量名不能包含空格,一般用下划线代替空格
- 不要把Python的关键字和函数名当做变量名
- 慎用I和O,因为容易被看成数字1和0 (
这点确实特别重要hhhh)
易错点:
message = 'Wellcome to the World of Python!'
print(mesage)
#哈哈,日常拼写错误,通假字从古至今从未断绝
2. 字符串string
字符串顾名思义就是一串字符,Python中引用字符串的引号可以是单引号也可以是双引号
a. 转义符
在转义符上,Python和C是类似的,因此不作过多解释,只丢几个最基本的在这里
print('Hello World!\n?????')
#这里的\n是换行
print('Hello World!\r What?')
#这里的\r是回车(光标回到起点)
上面两个转义符的效果如下:
换行转义符'\n'输出效果
Hello World!
?????
回车转义符'\r'输出效果
What? World!
b. 字符串相关函数
title()
title函数用于规整字符串使其符合一般文章标题要求(各个单词**首字母大写**)
name = 'hank gan'
print(name.title())
输出结果:
Hank Gan
upper()
和lower()
upper函数用于将单词的每个字母转化为大写
lower函数用于将单词的每个字母转化为小写
name = 'Hank Gan'
print(name.upper())
print(name.lower())
输出结果:
HANK GAN
hank gan
合并/拼接字符串
利用+
来拼接不同字符串,使其成为一个新的字符串
message = 'Wellcome to the World of Python!'
first_name = 'hank'
last_name = 'gan'
full_name = first_name + ' ' + last_name
print('Hello' + ' ' + full_name.title() + ', ' + message)
在上面的print
语句中,我用了许多+
连接了不同字符串,使同一个print
能够打印更多信息,输出结果:
Hello Hank Gan, Wellcome to the World of Python!
对字符串中空格的操作
在我们或者其他用户向字符串中输入值时,不可避免的会存在输入空格的情况,但有的时候我们的程序在操作过程中不需要这些多余的空格,这时候就需要Python自带的字符串函数来帮忙。
rstrip()
、lstrip()
和strip()
strip是“剔去”的意思,“r”和“l”分别代表左和右,那么这三个函数的作用就通俗易懂了,它们分别是剔除字符串左边、右边、左右两边空格的函数,下面是个小例子:
learning = " Python "
print(learning.lstrip())
print(learning.rstrip())
print(learning.strip())
输出结果:
Python
Python
Python
联想到在转义符那一部分学过的制表符"\t",如果将它与上述删除函数结合起来使用的话,就能轻易改变字符串中的空格了
3. 布尔值/Boolean
和C语言不同,Python是具有布尔值的,且Python的布尔值有且仅有True
和False
。且布尔值的与、或、非运算在Python中表示为and
、or
、not
temp_a = True
temp_b = False
print(temp_a and temp_b)
print(temp_a or temp_b)
print(not temp_b)
分析:
and
是与运算,只有当and
两边的布尔值全为True
时,运算结果才为True
,其余全为False
or
是或运算,当or
两边的布尔值有一个为True
时,运算结果为True
not
是非运算,是一种单目运算符,not
运算值为取反
运算结果为:
False
True
True
列表型数据类型list
列表由一系列按特定顺序排列的元素组成,它可以包括字符串、数字,也可以包括其他列表等等数据类型。
在Python中,用方括号[]
来表示列表,并用逗号,
来分隔其中的元素,例如,用list中套娃list (禁止套娃) 的方式表示出以下几个买不起的山地车品牌:
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
1. 访问list的方法
a. 正向索引
和C语言中的数组一样,通过索引访问list时,索引号是从0
开始的,也就意味着整个list的索引号应该是list中元素数目-1
同时,list中的元素若为字符串的话,也可以用上述字符串的各种处理方法来对其进行处理:
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
print(bicycles[0])
print('I can not afford a ' + bicycles[3][2].title() + ' ' + 'mountain bike.')
输出结果:
giant
I can not afford a Santa Cruz mountain bike.
b. 反向索引
如果当一个list中的元素过多,我们想取倒数第一个或者第二个,而不想输入太大的索引号(比如bicycles[9999]
这种)的时候,也可以用负数来索引list:
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
print(bicycles[4])
print(bicycles[-1])
print(bicycles[3][2])
print(bicycles[-2][-1])
输出结果:
cannondale
cannondale
santa cruz
santa cruz
对照着list的各个元素索引号就很好理解上述两种索引方式
2. 修改、添加和删除list中的元素
list区别于tuple(后面会写到)的一大区别就是list可以修改,而tuple在定义后就不能够更改了,所以如何修改、添加和删除list中的元素是学习list基础时重点需要掌握的内容。
a. 修改list中的元素
修改list中的元素其实很简单,甚至不需要函数来操作,重新定义你想要修改的元素就行了
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
bicycles[0] = 'dartmoor'
print(bicycles[0].upper())
'''
武汉好像玩DARTMOOR这个牌子山地车的人比较少,玩他家街车的人怪多的
他这个牌子全大写,尊重品牌名称,upper
'''
第四行代码就是对bicycle
这个list的第0
号索引值代表的元素进行修改
输出结果:
DARTMOOR
b. 向list中添加元素
在list末尾添加元素
可能这几天我又穷了,连美利达都买不起了,昂贵的自行车品牌中又要添加新成员了怎么办,append()
函数可以解决这个问题!
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
bicycles.append('merida')
print('Gosh, I can not afford ' + bicycles[5].title() + ' now.')
穷了的结果:
Gosh, I can not afford Merida now.
除了能往list末尾添加元素,append()
还有一个重要用法是用来动态地构建list:
bicycles = [] #首先定义一个需要被构建的list
bicycles.append('giant')
bicycles.append('trek')
bicycles.append('specialized')
...
这样的好处是,它可以根据我们的需要随意构建list,而不是在在写下方的代码时再回到一开始定义list的位置添加元素
在列表中插入元素
有的时候我们想在list中的某一个位置插入元素,而不是在末尾插入,这时候就需要insert()
来帮忙了
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
bicycles.insert(0,'merida')
print(bicycles[0].title() + '\n' + bicycles[1].title())
输出结果:
Merida
Giant
可见,insert()
的第一个参数是指你要把新元素插入到list中,新元素需要被安排的索引号x
,插入后,原list在索引号x
以后的元素索引号整体后移一位,新元素占据索引号x
对应的list中的位置
c. 从列表中删除元素
今年收了数量可观的压岁钱,看来咱应该是买得起一辆Giant Reign了,那如何删除列表里的Giant呢?
知道是第几个元素
如果知道要删除的元素在list中的索引号,那么我们常用del
语句来删除元素
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
del bicycles[0]
print(bicycles)
有钱了的结果:
['trek', 'specialized', ['canyon', 'commencal', 'santa cruz'], 'cannondale']
可见,我们成功删掉了Giant!(确信
知道这个元素是什么
如果我们知道这个元素是什么,那么我们常用remove()
来删除元素
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
bicycles.remove('giant')
print(bicycles)
除此之外,我们还可以利用字符串的定义,来更进一步地利用remove()
删掉我们想删掉的内容
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
I_have_bought_it = 'giant'
bicycles.remove(I_have_bought_it)
print(bicycles)
print(I_have_bought_it.title() + ' is not in this list because I have bought it!')
输出结果:
['trek', 'specialized', ['canyon', 'commencal', 'santa cruz'], 'cannondale']
Giant is not in this list because I have bought it!
显然,这样删除Giant更清晰,因为我把删除它的原因也表示出来了,因为我买了它
虽然要删一个元素,这个元素也想留着
这是什么奇葩要求…离开的就让它离开好嘛,不要再怀念了…
但其实也是做得到的,使用pop()
可以在删除某一元素的同时,存储下被删除的这一个元素
这时候的list就像一个栈
,而删除list末尾的元素相当于弹出栈顶元素
所以,pop()
被称为“删除函数”是有些不恰当的,应该叫做“弹出函数”才对
bicycles = ['trek','specialized','santa cruz','giant']
print(bicycles)
poped_bicycle = bicycles.pop()
print(bicycles)
print('I have bought ' + poped_bicycle)
输出结果:
['trek', 'specialized', 'santa cruz', 'giant']
['trek', 'specialized', 'santa cruz']
I have bought giant
可见,它把被删除的元素保留在了poped_bicycles
中,我们仍能访问它
其实,pop()
可以弹出任意一个你知道索引号的元素,只需在括号中填入你想要弹出的索引号即可:
bicycles = ['trek','specialized','giant','santa cruz']
poped_bicycle = bicycles.pop(2)
print(bicycles)
print('I have bought ' + poped_bicycle)
输出结果:
['trek', 'specialized', 'santa cruz']
I have bought giant
3. 组织列表
当我们拿到手一个list
,有强迫症的人肯定想做点什么,比如按首字母顺序重新排一下之类的,但是如果真的手动一个一个重新排列的话那岂不是要做到明年去了…Python的动人之处就在于它有各种各样的库,各种各样的函数来简化我们的操作
我有几辆买不起的车?
虽然我知道我挺穷的,但我还是想知道有多少牌子的山地车是我买不起的,这时候我们就可以用len()
来确定一下list的长度。
注意,len()
只能确定某一个list
有多少元素,而listA
中如果还套着一个listB
的话,listB
中元素的个数是不被计算的,只会把listB
当做整个元素看待
other = ['canyon','commencal','santa cruz']
bicycles = ['giant','trek','specialized',other,'cannondale']
print(len(other))
print(len(bicycles))
输出结果:
3
5
把我买不起的车排一下序
虽然咱买不起,但总得看着顺眼吧,来排排序?
永久性排序
使用sort()
可以轻松对一个list按照首字母顺序进行排序
bicycles = ['trek','specialized','giant','santa cruz']
bicycles.sort(reverse = False)
print(bicycles)
输出结果:
['giant', 'santa cruz', 'specialized', 'trek']
我们成功地排序了这一组list,然而,这个reverse = False
是什么意思?查了下词典,reverse
的意思是颠倒
,那么显然,reverse = False
意为不颠倒字母顺序,如果我们要按相反的字母顺序排序的话,sort()
中的参数就应该为reverse = True
临时性排序
这些车毕竟买不起,看看就行了,看完了还得给人家放回去,那么如何临时‘看一看’,看完了还能‘放回去’呢?就得请出sorted()
来帮忙了
bicycles = ['trek','specialized','giant','santa cruz']
print(bicycles)
print(sorted(bicycles))
print(bicycles)
输出结果:
['trek', 'specialized', 'giant', 'santa cruz']
['giant', 'santa cruz', 'specialized', 'trek']
['trek', 'specialized', 'giant', 'santa cruz']
看到没,我只看看,不买,给您还回去了(捂脸.jpg
倒着打印
我想玩点花的,我想倒着把我买不起的车子的名字打印出来,但是又懒得一个一个颠倒,有啥办法吗?reverse()
就是干这个事的
bicycles = ['trek','specialized','giant','santa cruz']
print(bicycles)
bicycles.reverse()
print(bicycles)
输出结果:
['trek', 'specialized', 'giant', 'santa cruz']
['santa cruz', 'giant', 'specialized', 'trek']