python基础之字符串与字典以及set集合

一、String字符串

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

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

2.获取最大最小字符

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码值

3.字符串的替换

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
str7 = "how  are you  ,u ewe "
print(str7.translate(dic))
#结果
how  2re you  ,u ewe 
#注意:很少用
4.判断字符串的开头结尾

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
5.编码与解码

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 的时候,忽略错误

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

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
7.判断大小写

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
8.判断是否包含特殊字符

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()

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

isdecimal()
True: Unicode数字,,全角数字(双字节)
False: 罗马数字,汉字数字
Error: byte数字(单字节)
print("123".isdecimal())
print("123z".isdecimal())
#结果
True
False
num = "1"  #unicode
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = "1" # 全角
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = b"1" # byte
num.isdigit()   # True
num.isdecimal() # AttributeError 'bytes' object has no attribute 'isdecimal'
num.isnumeric() # AttributeError 'bytes' object has no attribute 'isnumeric'

num = "IV" # 罗马数字
num.isdigit()   # True
num.isdecimal() # False
num.isnumeric() # True

num = "四" # 汉字
num.isdigit()   # False
num.isdecimal() # False
num.isnumeric() # True

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
9.ASCII码转换

9.1 ord(str)

功能:获取字符串的整数表示 ASCII码值

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

9.2 chr(str)

把编码转成对应的字符

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

二、dict字典

1.概述

dict也是一种存储方式,类似于list和tuple,但是,字典采用键—值(key—value)的形式存储

优点:具有极快的查找速度

2.key的特性

1.字典中的key必须唯一

2.key必须是不可变对象

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

list是可变的,不能作为key

思考:保存一个班级中的童鞋的成绩

思路1:使用list或者tuple,但是容易发生错乱对不上号

思路2:使用二维list或者tuple,但是会比较慢

思路3:可以采用字典,将学生的学号或者名字作为key,成绩为value进行存储,方便查找

3.字典的创建

语法:

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

dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1)
4.字典操作

4.1访问元素

语法:元素 = 字典名[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')
print(value)

4.2 添加元素

语法:字典名[key] = value

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

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

4.3 删除元素

语法:字典名.pop(key)

dist1 = {'tom':90,'lili':78, 'lele':92}
dist1.pop('tom')
print(dist1)
5.字典的遍历

5.1 使用for循环遍历

语法:

获取键

for key in dist:

​ print(key)

获取值

for value in dist.values() :

​ print(value)

同时获取键和值

for k, v in dist.items() :

​ print(k, v)

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

dist1 = {'tom':90,'lili':78, 'lele':92}
#获取字典的key
for key in dist1:
    print(key)
#获取字典中的value    
for value  in dist1.values():
    print(value)
#同时获取字典中的key与value
for k, v  in dist1.items():
    print(k, v)
6.与list的区别

1.dist的查找和插入的速度极快,不会随着key-value的增加而变慢,但是list在查找的时候需要从头向后挨个遍历元素,并且当数据量增大的时候,速度也会随着变慢

2.dist需要占用大量的内存,内存浪费多,而list只相当于存储了字典的key或者value部分,并且数据时紧密排列的。

三、set集合

1.概述

set与dist类似,也是一组key的集合,但与dist的区别在于set不存储value

本质:无序且无重复元素的集合

2.set的创建

语法:

set1 = set([1, 2, 3, 4, 5])

注意:创建set需要一个list或者tuple或者dist作为输入集合,重复的元素在set中会被自动的过滤

s1 = set([1, 2, 3, 4, 5])
print(s1)
3.set操作

3.1 set.add()

注意:

1.可以添加重复的元素,但是不会有效果

2.add 的元素不能是列表或者字典,因为他们是可变的

s1 = set([1, 2, 3, 4, 5])
s1.add(6)
s1.add((2, 3, 4))
print(s1)
#结果
{1, 2, 3, 4, 5, 6, (2, 3, 4)}

3.2 set.update()

功能:插入整个list、tuple、字符串打碎插入

注意:不能直接插入数字

s1 = set([1, 2, 3, 4, 5])
s1.update([4,"anam","hha"])
s1.update("hello")
print(s1)
#结果
{1, 2, 3, 4, 5, 'anam', 'l', 'o', 'h', 'e', 'hha'}

3.3 set.remove(元素)

功能:删除元素

s1 = set([1, 2, 3, 4, 5])
s1.remove(3)
print(s1)

3.4 遍历元素

语法:

for i in set :

print(i)

注意:set是无序的,因此不能通过下标获取元素

for index, data in enumerate(set):

​ print(index, data)

可以通过这种方式,来强行添加下标

s1 = set([1, 2, 3, 4, 5])
for i in s1:
    print(i)

for index,data in enumerate(s1):
    print(index, data)

3.5 交集与并集

语法:

交集 newest = set1 & set2

并集 newest = set1 | set2

s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7])
s3 = s1 & s2
s4 = s1 | s2
print(s3)
print(s4)
#结果
{4, 5}
{1, 2, 3, 4, 5, 6, 7}

四、类型转换

主要针对几种存储工具:list、tuple、dict、set

特殊之处:dict是用来存储键值对的

4.1 list 转换为set
l1 = [1, 2, 4, 5]
s1 = set(l1)
print(type(s1))
print(s1)

4.2 tuple 转换为set

t1 = (1, 2, 3, 4)
s1 = set(t1)
print(type(s1))
print(s1)

4.3 set转换为list

s1 = set([1, 2, 3, 4])
l1 = list(s1)
print(type(l1))
print(l1)

4.4 set转换为tuple

s1 = set([1, 2, 3, 4])
t1 = tuple(s1)
print(type(t1))
print(t1)

五、迭代器

列表生成式

语法:

list = [result for x in range(m, n)]

需求:创建一个[1, 2, …100]的列表

>>> range(1, 101)
[1, 2, 3, 4, 5,...,100]

需求2 :生成一个[1x1, 2x2, 3x3,….100x100]的列表

>>> list1 = []
>>> for x in range(1, 101)
        list1.append(x*x)
>>> list1
[1, 4, 9,....10000]

#使用列表生成式,可以这么来写
>>> list2 = [x*x for x in range(1, 101)]

本质:就是把for循环强制性的卸载一行,而输入的结果写在最前面,把结果使用[]括起来

5.1 可迭代对象

1.可以直接直接作用于for循环的对象统称为可迭代对象,我们称之为:Iterator

2.我们可以使用isintance()判断一个对象是否是Iterator对象

3.可以直接作用于for循环的数据类型有以下几种

​ a.集合数据类型:如list、tuple、dict、set和string

​ b.生成器(generator):就是一个能返回迭代器的函数,其实就是定义一个迭代算法,可以理解为一个特殊的迭代器。

生成器:

通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,如果我们仅仅需要访问前面几个元素,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)

#要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator
>>> g = (x for x in range(1, 101))
>>> g
<generator object <genexpr> at 0x10124df68>
>>> g.__next__()
1
>>> [x for x in g]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

注意:使用Iterator判断的时候需要导入Iterable的包

from collections import Iterable

print(isinstance([],Iterable))
print(isinstance((),Iterable))
print(isinstance({},Iterable))
print(isinstance("",Iterable))
print(isinstance((x for x in range(10)),Iterable))
print(isinstance(1,Iterable))
#结果
True
True
True
True
True
False
5.2 迭代器

迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后出现StopIteration错误,表示无法返回下一个值

可以被next()函数调用并不断返回下一个值得对象成为迭代器(Iterator对象)

可以使用isinstance()函数判断一个对象是否是Iterator对象

print(isinstance([],Iterator))
print(isinstance((),Iterator))
print(isinstance({},Iterator))
print(isinstance("",Iterator))
# 只有这个是迭代器
print(isinstance((x for x in range(10)),Iterator))

#结果
False
False
False
False
True
5.3 Iterator转换

可以通过Iter()函数将list、tuple、dict、string转换为Iterator对象

>>> a = iter([1, 2, 3, 4, 5])
>>> print(next(a))
1
print(isinstance(iter([]), Iterator))
print(isinstance(iter(()), Iterator))
print(isinstance(iter({}), Iterator))
print(isinstance(iter(''), Iterator))
#结果
True
True
True
True
发布了31 篇原创文章 · 获赞 4 · 访问量 3520

猜你喜欢

转载自blog.csdn.net/qq_29074261/article/details/80016686