目录
【说明】系列文章《【windows】python基础内容》为学习《python编程从入门到实践》形成的笔记
一、变量和简单数据类型
1.使用变量时的规则
- 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。
- 变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greeting message会引发错误。
- 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print。
- 变量名应既简短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
- 慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。
【注意】就目前而言,应使用小写的Python变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母会方便很多。
2.字符串
在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号""
和撇号'
:
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."
(1)修改字符串大小写
方法title()
:以首字母大写的方式显示每个单词
方法upper()
:将字符串改为全部大写
方法lower()
:将字符串改为全部小写
name = "ada lovelace"
print(name.title())#title() 以首字母大写的方式显示每个单词
print(name.upper())
print(name.lower())
结果:
(2)合并(拼接)字符串
Python使用加号(+ )来合并(拼接)字符串
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
message = "Hello, " + full_name.title() + "!"
print(message)
结果:Hello, Ada Lovelace!
(3)添加空白(制表符/换行符)
在编程中,“空白” 泛指任何非打印字符,如空格、制表符和换行符。
可使用空白来组织输出,以使其更易读。
A.制表符
制表符(也叫制表位)的功能是在不使用表格的情况下在垂直方向按列对齐文本。比较常见的应用包括名单、简单列表等。也可以应用于制作页眉页脚等同一行有几个对齐位置的行。
要在字符串中添加制表符,可使用字符组合\t
,如:print("\tPython")
结果:
B.换行符
要在字符串中添加换行符,可使用字符组合\n
:print("Languages:\nPython\nC\nJavaScript")
结果:
C.制表符与换行符同时使用
\n\t
让Python换到下一行,并在下一行开头添加一个制表符;同样,也可以使用\t\n
让Python添加一个制表符,然后再换到下一行。如:
print("Languages:\tPython\nC\t\nJavaScript")
结果:
(4)删除空白
Python能够找出字符串开头和末尾多余的空白。
- 剔除字符串末尾的空白,使用方法
rstrip()
; - 剔除字符串开头的空白,使用方法
lstrip()
; - 同时剔除字符串两端的空白,使用方法
strip()
。
favorite_language=' python '
print(favorite_language.rstrip())
print(favorite_language.lstrip())
print(favorite_language.strip())
(存储在变量favorite_language 中的字符串两端包含多余的空白)
运行结果为:
(5)问题(留坑)
如何打印出anna said,"I'm beautiful!"
【思考结果】
print('anna said:"'+"you're beautiful!"+'"')
3.数字
(1)整数
- python使用两个乘号
**
表示乘方运算:
- python支持使用
括号
来修改运算次序:
(2)浮点数
浮点数的运算与整数相同,但是,运算结果包含的小数位数可能是不确定的:
所有语言都存在这种问题。
(3)函数str() 避免类型错误
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)
结果:Happy 23rd Birthday!
str()
的作用:在这个示例中,Python发现你使用了一个值为整数(int )的变量,但它不知道该如何解读这个值。Python知道,这个变量表示的可能是数值23,也可能是字符2和3。像上面这样在字符串中使用整数时,需要显式地指出你希望Python将这个整数用作字符串。为此,可调用函数str() ,它让Python将非字符串值表示为字符串。
三、列表
1.列表的概念
在Python中,用方括号[]
来表示列表,并用逗号来分隔其中的元素。例子:bicycles = ['trek', 'cannondale', 'redline', 'specialized']
2.访问/使用列表元素
列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。
(1)访问
访问列表元素:可指出列表的名称,再指出元素的索引,并将其放在方括号内。例如,从上文bicycles列表中提取第一款自行车:print(bicycles[0])
python的返回结果:只包括该元素,而不包括方括号和引号,即上述返回结果为:trek
(同时可以对任何列表元素调用字符串的相关方法,如print(bicycles[0].title())
结果为Trek
)
(2)使用
列表元素的使用:与其他变量相同。
message = "My first bicycle was a " + bicycles[0].title() + "."
的print结果就是My first bicycle was a Trek.
3.列表索引
列表元素的索引
从前往后:0,1,2,3,4,5。即print(bicycles[0])
结果为trek
从后往前:-1,-2,-3,-4。即print(bicycles[-1])
结果为specialized
4.元素的处理
(1)修改列表元素
方法:再次赋值
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles[0] = 'ducati'
print(motorcycles)
结果为['ducati', 'yamaha', 'suzuki']
(2)添加列表元素
A.在列表末尾添加元素
方法:append()
(只能添加一个元素)
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.append('ducati')
print(motorcycles)
结果:['honda', 'yamaha', 'suzuki', 'ducati']
B.在列表中插入元素
方法:insert()
,要指定新元素的索引和值。
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)
结果:['ducati', 'honda', 'yamaha', 'suzuki']
(3)删除列表元素
A.不再以任何方式使用要删除元素(利用索引)
方法:del
语句,一次只能删除一个元素
motorcycles = ['honda', 'yamaha', 'suzuki']
del motorcycles[0]
print(motorcycles)
结果:['yamaha', 'suzuki']
B.还需使用删除元素(利用索引)
方法:pop()
可删除列表末尾的元素,也可删除任意位置的元素(指定索引),并可接着使用。
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
#从列表中弹出末尾元素,并赋值到popped_motorcycle中
popped_motorcycle = motorcycles.pop()#将要删末尾元素赋值给新的变量
print(motorcycles)
print(popped_motorcycle)
first_owned = motorcycles.pop(0)#将要删索引为0的元素赋值给新的变量
print(first_owned)
print(motorcycles)
结果:
['honda', 'yamaha', 'suzuki']#原列表(A)
['honda', 'yamaha']#删除末尾元素(C)后列表(B)
suzuki#末尾被删除元素(C)
honda#删除末尾元素(C)后的列表(B),被指定删除的索引为0的元素(D)
['yamaha']#B删除索引为0的元素(D)后的新列表(E)
(这里有一点点绕,但好好阅读代码、结果和所给注释,也和容易理解。)
C.根据值删除元素(不需索引)
方法:remove()
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
motorcycles.remove('ducati')
print(motorcycles)
结果:['honda', 'yamaha', 'suzuki']
使用remove()
从列表中删除元素时,也可接着使用它的值:
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
too_expensive = 'ducati'#将值存储在变量中
motorcycles.remove(too_expensive)#利用变量删除列表中的值
print(motorcycles)
print("\nA " + too_expensive.title() + " is too expensive for me.")
【注意】remove()
只可删除第一个指定的值。
如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
5.列表整体的处理
(1)对列表进行永久性排序(按字母顺序)
方法:sort()
特点:永久性地修改了列表元素的排列顺序,再也无法恢复到原来的排列顺序——sort()
是应用在 list 上的方法
语法:
list.sort(reverse=False, key=None)
- reverse: 可选。reverse=True 将对列表进行降序排序。默认是 reverse=False。
- key:可选。指定排序标准的函数。
例子:
#(1)按字母顺序排列
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
#(2)按字母顺序相反的顺序排列
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
#(3)设定排序标准:字母长度
def myFunc(e):
return len(e)
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(key=myFunc)
print(cars)
#(4)根据字典的 "year" 值对字典列表进行排序
def myFunc(e):
return e['year'] # 返回 'year' 值的函数
cars = [
{'car': 'Porsche', 'year': 1963},
{'car': 'Audi', 'year': 2010},
{'car': 'BMW', 'year': 2019},
{'car': 'Volvo', 'year': 2013}
]
cars.sort(key=myFunc)
print(cars)
结果:
['audi', 'bmw', 'subaru', 'toyota']
['toyota', 'subaru', 'bmw', 'audi']
['bmw', 'audi', 'toyota', 'subaru']
[{'car': 'Porsche', 'year': 1963}, {'car': 'Audi', 'year': 2010}, {'car': 'Volvo', 'year': 2013}, {'car': 'BMW', 'year': 2019}]
(2)对列表进行临时性排序(按字母顺序)
方法:sorted()
特点:能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序——sorted()
方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
语法:
sorted(iterable, cmp=None, key=None, reverse=False)
- iterable : 可迭代对象。
- cmp:一个比较函数,具有两个参数,参数的值都是从可迭代对象中取出,返回一个确定的int结果:大于则返回1,小于则返回-1,等于则返回0。
- key: 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse : 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值是一个经过排序的可迭代类型,与iterable一样,即重新排序的列表。
例子1:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(sorted(cars))
print sorted(cars,reverse=True)#或print (sorted(cars,reverse=True))
结果:['audi', 'bmw', 'subaru', 'toyota']
和['toyota', 'subaru', 'bmw', 'audi']
例子2:
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>>
备注1:lambda函数
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
>>> f=lambda x,y,z:x+y+z
>>> f(1,2,3)
6
(相关问题)cmp(x, y)
和lambda x, y: cmp(x, y)
啥区别?
cmp(x,y)
是比较x和y的值的大小,x和y的值已经是确定的,返回一个确定的int结果:大于则返回1,小于则返回-1,等于则返回0。lambda x, y: cmp(x, y)
是一个函数,参数x和y的值不确定,根据传入的参数,返回一个不确定的int结果。
其他参考资料:Python 之 lambda 函数完整详解 & 巧妙运用
备注2:cmp()函数
cmp(x,y)
函数用于比较2个对象的大小
结果:如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
语法:cmp( x, y )
- x – 数值表达式。
- y – 数值表达式。
例子:
>>> cmp(1,2)
-1
>>> cmp(2,2)
0
(3)对列表进行倒序打印
【注意】不是指按与字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序
方法:reverse()
说明:永久性地修改列表元素的排列。但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse()
即可。
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()
print(cars)
结果:['subaru', 'toyota', 'audi', 'bmw']
(4)确定列表长度
方法:len()
>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4
【注意】Python计算列表元素数时从1开始,因此确定列表长度时,不会遇到差一错误。
参考
1.Python的sort函数和sorted、lambda和cmp
2.Python sorted() 函数
3.Python 列表 sort() 方法