Python学习笔记【week02day2】冒泡法、tuple元组、字符串2、字典

冒泡法、tuple元组、字符串2、字典

1.一个初级的冒泡法

练习题1: 冒泡排序
list2 = [50,1,2,23,4,5,2,12,45,6,8,9,27,80]
for i in range(1,len(list2)):
	for j in range(len(list2)-i):
    	# 判断前面的数是否比后面的大
    	if list2[j] > list2[j+1]:
        	#交叉赋值
        	list2[j],list2[j+1] = list2[j+1],list2[j]
print(list2)

练习题2: 简单判断字符串是否为数字、字母和下划线“_”组成:
for x in str1:
	if x >= "0” and x <= "9" or x =="_" or x>='a' and x<="z" or x>="A" and x <= "Z":
		pass
	else:
		print("包含非法字符")

2. tuple元组

本质:一种有序的集合,一旦初始化,就不能发生变化。
注意:这里说的不能改变,是“指向”不可修改
但是,若tuple中包含list,list中的元素可修改,因为tuple指向的是list的地址

创建:元组名 = (元素1, 元素2 ,元素3,…)
注意:有元素时必须加“,”,括号可以省,但逗号不能省

#创建空的元组
tuple1 = ()
tuple2 = tuple()

#创建带有元素的元组(一定要有逗号)
tuple3 =(22, 33, 14, 109)
tuple4 = (1,)
tuple4 = 1,

#与列表类似,元组中的元素类型可以不同
tuple3 = (23,True,"good")
print(tuple3)

#定义只有一个元素的元组
tuple4 = (1)  #注意:这定义的不是元组而是整数1(注意:tuple4 type为int)
tuple4 = (1,) #定义一个元素的元组定义时必须加一个逗号",",用来消除歧义

元组元素的访问

格式: 元组名[下标]

tuple1 = (20, 40, 201, 401)
print(tuple1[0])
#注意使用下标取值的时候,要注意下标的取值范围,不要下标越界
#获取最后一个元素
print(tuple1[-1])

元组的截取
语法:

元组名[start:end]

截取的元组范围[start,end)

功能:获取开始下标到结束下标之前的所有元素。

若不指定start则默认是从开头开始截取到指定位置

若不指定end则默认从指定位置截取到结尾

tuple1 = (1,  2, 3, 8, 'hello', 'good')
tuple2 = tuple1[2:5]
print(tuple2)
#结果
(3, 8, 'hello')

tuple1 = (1,  2, 3, 8, 'hello', 'good')
tuple2 = tuple1[:5]
print(tuple2)
#结果
(1, 2, 3, 8, 'hello')

tuple1 = (1,  2, 3, 8, 'hello', 'good')
tuple2 = tuple1[3:]
print(tuple2)
#结果
(8, 'hello', 'good')

注意:tuple1[:-1] [1:] [-1]
           去尾 再去头 再取最后一个 
  		[1 : : -1 ]
  		1表示从第二个开始 , -1表示从后往前取

元组的方法

  1. len(tuple)

功能:获取元组元素的个数

tuple1 = (1,  2, 3, 8, 'hello', 'good')
print(len(tuple1))
#结果
6
  1. max(tuple) 注意:不能比较str类型

功能:获取元组中元素的最大值

tuple1 = (1,  2, 3, 8, 20, 13)
print(max(tuple1))
#结果
20
  1. min(tuple)

功能:获取元组中元素的最小值

tuple1 = (1,  2, 3, 8, 20, 13)
print(min(tuple1))
#结果
1
  1. tuple(list)

功能:将列表转换为元组

list1 = [1,  2, 3, 8, 20, 13]
print(tuple(list1))
#结果
(1, 2, 3, 8, 20, 13)

二维元组

t1 = (1,2,3)
t2 = (3,4,5)
特别注意:
t3 = (t1, t2)  结果:((1,2,3),(4,5,6))
t4 = (t1 + t2) 结果: (1,2,3,4,5,6)

3.字符串函数2

之前的学习中已经记录了部分字符串函数,现做个小补充

  1. 分割与合并

1.1) str1.split(str2, num)

功能:以str2为分割截取字符串,num默认为str1.count()

若给定num 后,则截取num个字符串,剩余的不再进行截取。

str1 = "how are you , i am fine thank you"
#使用空格进行分割
list1 = str1.split(" ")
print(list1)
#结果
['how', 'are', 'you', ',', 'i', 'am', 'fine', 'thank', 'you']

1.2) str1.splitlines([keepends])

功能:字符串会按照行(’\r’,’\r\n’,’\n’)进行分割,返回一个包含各行作为元素的列表,如果参数keepends的值为False,不包含换行符,如果为True,则保留换行符。

str2 = '''how are
you ?
i am
fine
!
'''

list2 = str2.splitlines()
print(list2)
#结果
['how are', 'you ?', 'i am', 'fine', '!']

str2 = '''how are
you ?
i am
fine
!
'''

list2 = str2.splitlines(keepends=True)
print(list2)
#结果
['how are\n', 'you ?\n', 'i am\n', 'fine\n', '!\n']

1.3) str1.join(seq)

功能:以指定字符串作为分隔符,将seq中的所有元素合并成为一个新的字符串

list2 = ['you', 'are', 'very', 'great', '!']
str3 = ' '.join(list2)
print(str3)
#结果
you are very great !

str1 = "how are you , i am fine thank you"
str3 = "*".join(str1)
print(str3)
#结果
h*o*w* *a*r*e* *y*o*u* *,* *i* *a*m* *f*i*n*e* *t*h*a*n*k* *y*o*u

注意:如果连接的是字符串,则它会把字符串中的每个字符使用指定字符连接。

这里要记住

list1 = ['you', 'are', 'very', 'great', '!']

str1 = “ ”.join(list1)  #list转字符串
list2 = str.split(" ")  #字符串转list
.join()和 .split() 是一对,可互相转换
  1. 获取最大最小字符

2.1) max(str)

功能: 返回字符串str中最大的字母

str1 = "how are you , i am fine thank you"
print(max(str1))
#结果
y

2.2) min(str)

功能:返回字符串str中最小字母

str1 = "how are you , i am fine thank you"
print(min(str1))
#结果
‘ ’

注意:比较的是ASCII码值

  1. 字符串的替换

3.1) replace(old , new [, count])

功能:将字符串中的old替换成new,若不指定count,则默认全部替换,若指定count,则替换前count个

str1 = "how are you , i am fine thank you"
str2 = str1.replace("you" ,'me')
print(str2)
#结果
how are me , i am fine thank me

3.2) 字符串映射替换

参数一:要转换的字符 参数二:目标字符

dic = str.maketrans(oldstr, newstr)

str2.translate(dic)

str5 = "aaa bbb  ccc  deee"
dic = str5.maketrans("ac", "21")
# a--2   c--1 (组合替换,2替换a,1替换c)
str7 = "how  are you  ,u ewe "
print(str7.translate(dic))
#结果
how  2re you  ,u ewe 
#注意:很少用
  1. 判断字符串的开头结尾

str.startswith(str1, start=0, end=len(str))

功能:在给定的范围内判断字符串是否以给定的字符串开头,如果没有指定范围,默认整个字符串

str1 = "aaa bbb  ccc  deee"
print(str1.startswith("aa"))
#结果
True


str1 = "aaa bbb  ccc  deee"
print(str1.startswith("aa", 3, 9))
#结果
False

str.endswith(str, start=0, end=len(str))

功能:在给定的范围内判断字符串是否以指定的字符串结尾,若没有指定范围,默认为整个字符串

str1 = "aaa bbb  ccc  deee"
print(str1.endswith("e"))
#结果
True

str1 = "aaa bbb  ccc  deee"
print(str1.endswith("e", 3 ,9))
#结果
False
  1. 编码与解码

str.encode(encoding=“utf-8”, errors=“scrict”)

功能:字符串的编码,若不指定encoding则默认选择utf-8

str1 = "你好吗?"
data = str1.encode()
print(data)
print(type(data))
#结果
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x90\x97\xef\xbc\x9f'
<class 'bytes'>

str.decode(encoding=“utf-8”)

“hello”.encode(“utf-8”).decode()

功能:对字符进行解码,若不指定编码格式,则默认选择utf-8

str1 = "你好吗?"
data = str1.encode()
print(data)
print(type(data))

data2 = data.decode()
print(data2)
print(type(data2))

#结果
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x90\x97\xef\xbc\x9f'
<class 'bytes'>
你好吗?
<class 'str'>

注意:解码时的编码格式要与编码时的保持一致

拓展:errors = ignore 的时候,忽略错误

  1. 判断是否为字母或数字

str.isalpha()

功能:判断字符串至少有一个字符,并且所有的字符都是字母,若为真则返回True,否则返回False

str8 = "hello ni hao "
print(str8.isalpha())
#结果
False
str9 = "hellonahao"
print(str9.isalpha())
#结果
True

str.isalnum()

功能:判断一个字符串至少有一个字符,并且所有的字符都是字母或数字则返回True否则返回False

str10 = "sc22xdcd"
print(str9.isalnum())
print(str10.isalpha())
#结果
True
False
  1. 判断大小写

str.isupper()

功能:若字符串中包含至少一个字母的字符,并且这些字母都是大写,则返回True,否则返回False

str10 = "AA2221  111"
print(str10.isupper())
#结果
True

str10 = "AAaaa"
print(str10.isupper())
#结果
False

str.islower()

功能:若字符串中包含至少一个字母的字符,并且这所有的字母都是小写,则返回True,否则返回False

str10 = "aa2221  111"
print(str10.islower())
#结果
True
  1. 判断是否包含特殊字符

8.1) str.istitle()

功能:如果一个字符串是标题化的则返回True,否则返回False

【标题化】每个首字母大写

str1 = "Hello World"
print(str1.istitle())

8.2) str.isdigit()

isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节)
False: 汉字数字, ,罗马数字
Error: 无

print("123".isdigit())
print("123a".isdigit())
#结果
True
False

同上

str.isnumeric()

功能:若字符串中只包含数字字符,则返回True,否则返回False

isnumeric()
True: Unicode数字,全角数字(双字节),汉字数字
False: 罗马数字,
Error: byte数字(单字节)

8.3) str.isdecimal()

功能:检查字符串是否只包含十进制字符【0,9】,如果是返回True,否则返回False

isdecimal()
True: Unicode数字,,全角数字(双字节),
False: 罗马数字,汉字数字
Error: byte数字(单字节)

print("123".isdecimal())
print("123z".isdecimal())
#结果
True
False

8.4) str.isspace()

功能:如果字符串只包含空白符,则返回True,否则返回False

print(" ".isspace())
print("\t".isspace())
print("\n".isspace())
print("\r".isspace())
print("  qq".isspace())

#结果
True
True
True
True
False
  1. ASCII码转换

9.1) ord(str)

功能:获取字符表示 ASCII码值

print(ord("A"))
print(ord("你"))
#结果
65
20320

9.2) chr(str)

把编码转成对应的字符

print(chr(68))
print(chr(20190))
#结果
D
仞

4. dict字典

  • 无序的集合
  • 采用键—值(key—value)的形式存储
  • 优点:具有极快的查找速度

key的特性

1.字典中的key必须唯一

2.key必须是不可变对象

例如:字符串、整数等都是不可变的,可以作为key

list是可变的,不能作为key

字典的创建

语法:

字典名 = {键1:值1,键2:值2,…}

dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1)

访问元素

语法:元素 = 字典名[key]

dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1['tom'])

注意:在key不存在的情况下,会报错

语法: 元素 = 字典.get(key)

功能:使用get的方法获取值,若key存在,则返回value的值,若key不存在则返回None

dist1 = {'tom':90,'lili':78, 'lele':92}
value = dist1.get('tom')

添加元素
语法:字典名[key] = value

dist1 = {'tom':90,'lili':78, 'lele':92}
dist1['lisi'] = 89

注意:一个key只能对应一个value,多次对一个key的value赋值,后面的值会把前面的值覆盖掉。

字典的遍历

使用for循环遍历

语法:

获取键

for  key   in   dist:
	print(key)

获取值

for value  in  dist.values() :
	 print(value)

同时获取键和值

for  k, v  in  dist.items() :
	 print(k, v)

遍历:
key: dic.keys()
value: dic.values()
key&value  dic.items()   item是tuple(key,value)

注意:字典是无序的,在内存中存储是无序的,因此无法通过下标来获取值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值