爬虫》——2Day Python基础 ——python字符串、列表、元组、集合、字典、函数"/>
《Python入门+Python爬虫》——2Day Python基础 ——python字符串、列表、元组、集合、字典、函数
Python学习版本: Python 3.X
观看:Python入门+Python爬虫+Python数据分析
3字符串、列表、元组、字典
名称 | 定义 | 编写方式 |
---|---|---|
列表(List) | 是一种有序和可更改的集合。允许重复的成员。 | [] |
元组(Tuple) | 是一种有序且不可更改的集合。允许重复的成员。 | () |
集合(Set) | 是一个无序和无索引的集合。没有重复的成员。 | {} |
字典(Dictionary) | 是一个无序,可变和有索引的集合。没有重复的成员 | {} 拥有键和值 |
3.1字符串
word = '字符串'
sentence = "这是一个句子。"
paragraph = """这是一个段落,
可以由多行组成"""
3.1.1 单引号和双引号如何选择?
1、包含单引号的字符串
假如你想定义一个字符串my_str,其值为: I’m a student,则可以采用如下方式,通过转义字符 \ 进行定义。
my_str = 'I\'m a student'
也可以不使用转义字符,利用双引号直接进行定义。
my_str = "I'm a student"
2、包含双引号的字符串
假如你想定义一个字符串my_str,其值为: Jason said “I like you” ,则可以采用如下方式,通过转义字符 \ 进行定义。
my_str = "Jason said \"I like you\""
也可以不使用转义字符,利用单引号直接进行定义。
my_str = 'Jason said "I like you"'
3.1.2 转义字符
3.1.3 字符串的截取和连接
str='chengdu'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print(str[:5]) # 输出第五个字母前的所有字符
print(str[0:7:2]) # [起始:终止:步长]
print('------------------------------')
print('hello\nchengdu') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\npython') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
3.1.4 字符串的常见操作
方法 | 描述 |
---|---|
bytes.decode(encoding=“utf-8”, errors=“strict”) | Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由str.encode() 来编码返回。 |
encode(encoding=‘UTF-8’,errors=‘strict’) | 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’ |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回False |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False |
isdigit() | 如果字符串只包含数字则返回 True 否则返回 False… |
isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False |
join(seq) | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
lstrip() | 截掉字符串左边的空格或指定字符。 |
split() | 在指定的分隔符处拆分字符串,并返回列表。 |
rstrip() | 删除字符串字符串末尾的空格. |
capitalize() | 把首字符转换为大写。 |
casefold() | 把字符串转换为小写。 |
center() | 返回居中的字符串。 |
count() | 返回指定值在字符串中出现的次数。 |
endswith() | 如果字符串以指定值结尾,则返回 true。 |
expandtabs() | 设置字符串的 tab 尺寸。 |
find() | 在字符串中搜索指定的值并返回它被找到的位置。 |
format() | 格式化字符串中的指定值。 |
format_map() | 格式化字符串中的指定值。 |
index() | 在字符串中搜索指定的值并返回它被找到的位置。 |
isupper() | 如果字符串中的所有字符都是大写,则返回 True。 |
ljust() | 返回字符串的左对齐版本。 |
lower() | 把字符串转换为小写。 |
lstrip() | 返回字符串的左修剪版本。 |
maketrans() | 返回在转换中使用的转换表。 |
partition() | 返回元组,其中的字符串被分为三部分。 |
replace() | 返回字符串,其中指定的值被替换为指定的值。 |
rfind() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rindex() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rjust() | 返回字符串的右对齐版本。 |
rpartition() | 返回元组,其中字符串分为三部分。 |
rsplit() | 在指定的分隔符处拆分字符串,并返回列表。 |
splitlines() | 在换行符处拆分字符串并返回列表。 |
startswith() | 如果以指定值开头的字符串,则返回 true。 |
strip() | 返回字符串的剪裁版本。 |
swapcase() | 切换大小写,小写成为大写,反之亦然。 |
title() | 把每个单词的首字符转换为大写。 |
translate() | 返回被转换的字符串。 |
upper() | 把字符串转换为大写。 |
3.2 列表
3.2.1 列表的定义与访问
列表的格式
变量A的类型为列表
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
比C语言的数组强大的地方在于列表中的元素可以是不同类型的
testList = [1, 'a']
打印列表
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
print(namesList[0])
print(namesList[1])
print(namesList[2])
列表的循环遍历
为了更有效率的输出列表的每个数据,可以使用循环来完成
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
for name in namesList:print(name)
3.2.3 常用操作
3.2.4 列表的嵌套
列表嵌套
类似while循环的嵌套,列表也是支持嵌套的
一个列表中的元素又是一个列表,那么这就是列表的嵌套
schoolNames = [['北京大学','清华大学'],['南开大学','天津大学','天津师范大学'],['山东大学','中国海洋大学']]
- 应用
一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配
#encoding=utf-8
import random
# 定义一个列表用来保存3个办公室
offices = [[],[],[]]
# 定义一个列表用来存储8位老师的名字
names = ['A','B','C','D','E','F','G','H']
i = 0
for name in names:index = random.randint(0,2)offices[index].append(name)
i = 1
for tempNames in offices:print('办公室%d的人数为:%d'%(i,len(tempNames)))i+=1for name in tempNames:print("%s"%name,end='')print("\n")print("-"*20)
3.2.5购买商品练习题
本人做法:
products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 2499], ["Coffee", 31], ["Book", 60],["Nike", 699]]
cart=[]
money=0
print("---------商品列表---------")
for i in range(len(products)):print(i,"\t",end="")for j in range(len(products[i])):print(products[i][j],"\t",end="")print("")
choose = input("请输入想要购买商品的序号(q退出):")
while choose != "q":if(int(choose)<0 or int(choose)>5):print("请选择商品编号")choose = input("请输入想要购买商品的序号(q退出):")else:print("你选择的商品为",products[int(choose)])cart.append(products[int(choose)][0])money=money+products[int(choose)][1]choose = input("请输入想要购买商品的序号(q退出):")print("您购买的商品为",cart)
print("共计消费",money)
3.3 元组
3.3.1 元组的定义与访问
创建空元组
tup1 = ()
元组的定义
tup1 = (50) # 不加逗号,类型为整型
print(type(tup1)) #输出<class 'int'>
tup1 = (50,) # 加逗号,类型为元组
print(type(tup1)) #输出<class 'tuple'>
元组访问
tup1 = ('Google', 'baidu', 2000, 2020)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)
删除元组后,再次访问会报错
tup = ('Google', 'baidu', 2000, 2020)
print (tup)
del tup
print ("删除后的元组 tup : ")
print (tup)
3.3.2 常用操作:
操作名称 | 操作方法 | 举例 |
---|---|---|
访问元组中的元素 | 通过下标直接访问 | print(tuple1[0]) |
遍历元组 | 通过for循环 | for i in tuple1: print(i) |
元组的切片 | 使用[: :] | tuple1[2:5:2] |
元组的加法 | + | tuple3=tuple2+tuple1 |
元组成员关系 | in | 2 in list1 |
得到重复元素数量 | count | tuple1.count(1) |
获取元组长度 | len() | |
获取元组元素最大值 | max() | |
获取元组元素最小值 | min() | |
其它类型对象转换成元组 | tuple() |
3.4 字典
3.4.1 字典的定义
变量info为字典类型:
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
说明:
- 字典和列表一样,也能够存储多个数据
- 列表中找某个元素时,是根据下标进行的
- 字典中找某个元素时,是根据’名字’(就是冒号:前面的那个值,例如上面代码中的’name’、‘id’、‘sex’)
- 字典的每个元素由2部分组成,键:值。例如 ‘name’:‘班长’ ,'name’为键,'班长’为值
3.4.2 根据键访问值
info = {'name':'吴彦祖','age':18}
print(info['age']) # 获取年龄
# print(info['sex']) # 获取不存在的key,会发生异常
print(info.get('sex')) # 获取不存在的key,获取到空的内容,不会出现异常
在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:
>>> age = info.get('age')
>>> age #'age'键不存在,所以age为None
>>> type(age)
<type 'NoneType'>
>>> age = info.get('age', 18) # 若info中不存在'age'这个键,就返回默认值18
>>> age
18
3.4.3 常用操作:
操作名称 | 操作方法 | 举例 |
---|---|---|
访问字典中的元素(1) | 通过key访问,key不存在会抛出异常 | print(dict1[“小明”]) |
访问字典中的元素(2) | 通过get方法,不存在返回None,不抛出异常 | print(dict1.get(“”小明)) |
遍历字典(1) | 通过for循环,只能获取key | for key in dict1:print(key, dict1[key]) |
遍历字典(2) | 配合items方法,获取key和val | for key, val in dict1.items():print(key, val) |
直接获取所有key和value | 使用keys和values方法 | print(dict1.values())print(dict1.keys()) |
修改val | 直接通过key修改 | dict1[‘小明’] = 2003 |
新增键值对 | 直接新增 | dict1[‘小李’] = 2005 |
字典元素的删除 | 通过key删除 | del dict1[‘小李’] |
字典元素的弹出 | 通过pop方法 | dict1.pop(“小李”) |
判断key是否存在 | in | “key” in dict1 |
合并字典 | update | dict1.update(dict2) |
把两个列表转为字典 | dict+zip方法 | dict(zip(list1,list2)) |
把一个嵌套列表转为字典 | dict方法 | dict2 = dict([[‘key1’, ‘value1’]]) |
清除字典内的元素 | clear方法 | dict1.clear() |
获取字典长度 | len() | |
获取最大的key | max() | |
获取最小的key | min() | |
其它类型对象转换成字典 dict() | dict([(1, 2), (2, 3)]) |
3.5集合
操作名称 | 操作方法 | 举例 |
---|---|---|
遍历集合 | 通过for循环 | for i in set1: print(i) |
更新集合 | update方法 | set1.update(set2) |
向集合添加新元素 | add方法 | set1.add(5) |
移除集合中的元素 | remove方法 | set1.remove(5) |
弹出元素 | pop方法 | val = set1.pop() |
清除元素 | clear方法 | set1.clear() |
删除集合 | del | del set1 |
获取集合长度 | len() | |
获取最大的元素 | max() | |
获取最小的元素 | min() | |
其它类型对象转换成集合 | set() |
4.函数
4.1 函数的概念
如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独
立功能的代码块组织为一个小模块,这就是函数。
4.2 函数定义和调用
4.2.1 定义函数
定义函数的格式如下:
def 函数名():代码
demo:
# 定义一个函数,能够完成打印信息的功能
def printInfo():print '------------------------------------'print ' 人生苦短,我用Python'print '------------------------------------'
4.2.2 调用函数
定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它
调用函数很简单的,通过 函数名() 即可完成调用
demo:
# 定义完函数后,函数是不会自动执行的,需要调用它才可以
printInfo()
4.3.2 调用带有参数的函数
以调用上面的add2num(a, b)函数为例:
def add2num(a, b):c = a+bprint c
add2num(11, 22) #调用带有参数的函数时,需要在小括号中,传递数据
调用带有参数函数的运行过程:
4.4 函数返回值
4.4.1 带有返回值的函数
想要在函数中把结果返回给调用者,需要在函数中使用return
如下示例:
def add2num(a, b):c = a+breturn c
或者
def add2num(a, b):return a+b
4.4.2 保存函数的返回值
在本小节刚开始的时候,说过的“买烟”的例子中,最后儿子给你烟时,你一定是从儿子手中接过来,程序也是如此,如果一个函数返回了一个数据,那么想要用这个数据,那么就需要保存
保存函数的返回值示例如下:
#定义函数
def add2num(a, b):return a+b
#调用函数,顺便保存函数的返回值
result = add2num(100,98)
#因为result已经保存了add2num的返回值,所以接下来就可以使用了
print result
4.4.3在python中我们可不可以返回多个值? (了解)
>>> def divid(a, b):
... shang = a//b
... yushu = a%b
... return shang, yushu
...
>>> sh, yu = divid(5, 2)
>>> sh
5
>>> yu
1
本质是利用了元组
课堂练习:
1.写一个打印一条横线的函数。(提示:横线是若干个“-”组成)
2.写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数)
3.写一个函数求三个数的和
4.写一个函数求三个数的平均值(提示:调用上面的函数)
4.5 局部变量和全局变量
4.5.1 局部变量
什么是局部变量
如下图所示:
小总结
局部变量,就是在函数内部定义的变量
不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用
4.5.2 全局变量
什么是全局变量
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是 全局变量
demo如下:
# 定义全局变量
a = 100
def test1():print(a)
def test2():print(a)
# 调用函数
test1()
test2()
全局变量和局部变量名字相同问题
看如下代码:
修改全局变量
既然全局变量,就是能够在所以的函数中进行使用,那么可否进行修改呢?
代码如下:
总结:
在函数外边定义的变量叫做 全局变量
全局变量能够在所有的函数中进行访问
如果在函数中修改全局变量,那么就需要使用 global
进行声明,否则出错
如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧 强龙不压地头蛇
4.6 函数使用注意事项
4.6.1. 自定义函数
<1>无参数、无返回值
def 函数名():语句
<2>无参数、有返回值
def 函数名():语句return 需要返回的数值
注意:
- 一个函数到底有没有返回值,就看有没有return,因为只有return才可以返回数据
- 在开发中往往根据需求来设计函数需不需要返回值
- 函数中,可以有多个return语句,但是只要执行到一个return语句,那么就意味着这个函数的调用完成
<3>有参数、无返回值
def 函数名(形参列表):语句
注意:
- 在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收
- 参数列表中变量的个数根据实际传递的数据的多少来确定
<4>有参数、有返回值
def 函数名(形参列表):语句return 需要返回的数值
<5>函数名不能重复
4.6.2. 调用函数
<1>调用的方式为:
函数名([实参列表])
<2>调用时,到底写不写 实参
- 如果调用的函数 在定义时有形参,那么在调用的时候就应该传递参数
<3>调用时,实参的个数和先后顺序应该和定义函数中要求的一致
<4>如果调用的函数有返回值,那么就可以用一个变量来进行保存这个值
4.6.3. 作用域
<1>在一个函数中定义的变量,只能在本函数中用(局部变量)
<2>在函数外定义的变量,可以在所有的函数中使用(全局变量)
更多推荐
《Python入门+Python爬虫》——2Day Python基础 ——python字符串、列表、元组、集合、字典、函数
发布评论