字符串的总结
字符串不能改变(存储方式:Unicode) 没有增删改 只可以查
可以进行 索引/切片
和以下方法:
二.字符串所有数据类型:
基本操作:
索引
切片
追加
删除
长度
切片
循环
包含
str
三.所有字符串数据类型举例
#变量名字变大写
tmp = "zhangyanlin"
tmp_new = tmp.upper()
print(tmp_new)
# 输出所有字符定义的所有类型
tmp.upper()
print(dir(tmp))
#['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center',
'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier',
'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind',
'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
#把首字母变成大写
u1 = "zhang"
u2 = u1.capitalize()
print(u2)
#20定义20个位,不够用_补全。
u1 = "zhang"
u2 = u1.center(20 ,'_')
print(u2)
#看zh在前10位出现了几次
u1 = "zhangyanlin is zhgod"
u2 = u1.count('zh',0, 10)
print(u2)
#获取字符串中大于等于0的位置,小于2的位置
u1 = "zhang"
print(u1.endswith('h',0,2))
#将tab转换成空格
u1 = "zhang 123"
print(u1.expandtabs(20))
#找位数,相同只能找第一个出现的,没有想应得会反馈-1
u1 = "zhang hello"
print(u1.find('h'))
#站位符0和1是代表站位符
u1 = "name {0}, age {1}"
print(u1.format("zhang",18))
u1 = " zhang is yan "
#判断是否是字母
print(u1.isalpha())
#判断是否是数字
print(u1.isdigit())
#判断是否是字母和数字
print(u1.isalnum())
#判断是否是小写
print(u1.islower())
#判断是否是空格
print(u1.isspace())
#判断是不是标题
print(u1.istitle())
#判断是不是全部都是大写
print(u1.isupper())
#把列表里的内容连接一起
print("_".join(u1))
#内容左对齐,右侧填充
print(u1.ljust(1))
#内容变小写
print(u1.lower())
#移除左边的空格
print(u1.lstrip())
#移除右边的空格
print(u1.rstrip())
#把有空格的内容分割,变成元祖类型,从左找;rpartition从右开始分割
print(u1.partition('is'))
#替换,后面可以加替换几个,从左往右
print(u1.replace('zh','ZH'))
#找到一个字符分割,从右,split从左分割
print(u1.rsplit('a',1))
#是否以某个字符串开始开始
print(u1.startswith('z'))
#移除两边空格(strip)
print(u1.strip())
#大写变小写,小写变大写
print(u1.swapcase())
#变大写(upper)
print(u1.upper())
四.索引
u1 = "zhangyanlin"
print(u1[0])
print(u1[1])
print(u1[2])
print(u1[3])
print(u1[4])
print(u1[5])
五.切片
#切出zhan,注:0是代表第一位,4代表小于四,知道第三个数
u1 = "zhangyanlin"
print(u1[0:4])
六.循环切片
1.while使用
u1 = "zhangyanlin"
u2 = 0
while u2 < len(u1):
print(u1[u2])
u2+=1
2.for使用
#循环切片
u1 = "zhangyanlin"
for u2 in u1:
print(u2)
#循环切片,输出除了y
u1 ="zhangyanlin"
for u2 in u1:
if u2 =="y":
continue
print(u2)
#循环切片,输出到y后不执行
u1 ="zhangyanlin"
for u2 in u1:
if u2 =="y":
break
print(u2)
字符串格式化
列表的总结:
列表可以进行: 索引/切片
对于列表来说:在循环时,最好不要进行删除的动作(一旦删除索引也会随之改变),容易出错。可以反方向删除(不会改变索引)
2.5.1、增。
li = [1,'a','b',2,3,'a']
# li.insert(0,55) #按照索引去增加
# print(li)
#
# li.append('aaa') #增加到最后
# li.append([1,2,3]) #增加到最后
# print(li)
#
# li.extend(['q,a,w']) #迭代的去增
# li.extend(['q,a,w','aaa'])
# li.extend('a')
# li.extend('abc')
# li.extend('a,b,c')
# print(li)
、删。
# l1 = li.pop(1) #按照位置去删除,有返回值
# print(l1)
# del li[1:3] #按照位置去删除,也可切片删除没有返回值。
# print(li)
# li.remove('a') #按照元素去删除
# print(li)
其他操作。
count(数)(方法统计某个元素在列表中出现的次数)。
1 a = ["q","w","q","r","t","y"]
2 print(a.count("q"))
index(方法用于从列表中找出某个值第一个匹配项的索引位置)
1 a = ["q","w","r","t","y"]
2 print(a.index("r"))
sort (方法用于在原位置对列表进行排序)。
reverse (方法将列表中的元素反向存放)。
1 a = [2,1,3,4,5]
2 a.sort()# 他没有返回值,所以只能打印a
3 print(a)
4 a.reverse()#他也没有返回值,所以只能打印a
5 print(a)
# li.clear() #清空列表
改。
# 改
# li = [1,'a','b',2,3,'a']
# li[1] = 'dfasdfas'
# print(li)
# li[1:3] = ['a','b']
# print(li)
查
切片去查,或者循环去查
元祖的总结
元祖:
元祖不能改变,所以只能进行“查”
************************************************************************************************************************
************************************************************************************************************************
字典的总结
dic = {'k1':'v1','k2':'v2','k3':'v3'} #1 #dic['k4'] = ['v4'] #有则覆盖,没有则添加 #2 #dic.setdefault('k6','v6') #有的话就不作为,没有的话就添加 #print(dic) #删 #dic.pop('k1',None) #pop是根据键来删除键值对,可以设置默认值,否则如果没有改键会报错 #print(dic) # print(dic.popitem()) #随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回 # print(dic) # dic.clear() # print(dic) # del dic # print(dic) # del dic['ke'] #del 也可以根据键来删除值 # print(dic) #改 #1.dic['k1'] = 'mi' #找到指定的键的位置直接就可以把值改了 直接覆盖 #2.dic1 = {'m1':'x1','m2':'x2'} # dic.update(dic1) # print(dic) #查 #1.dic['键名'] = '值' #可以直接让一个根据键得到值,但是如果没有会报错 #2.dic.get('键名',设置返回值)如果不设置返回值,没有此键的话也不会报错,会returnNone #print(dic.get('m6')) 其他操作。 # item = dic.items() # print(item,type(item)) # dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'> # 这个类型就是dict_items类型,可迭代的 # keys = dic.keys() # print(keys,type(keys)) # dict_keys(['sex', 'age', 'name']) <class 'dict_keys'> # values = dic.values() # print(values,type(values)) # dict_values(['male', 18, 'jin']) <class 'dict_values'> 同上 字典的循环。 # dic = {"name":"jin","age":18,"sex":"male"} # for key in dic: # print(key) # for item in dic.items(): # print(item) # for key,value in dic.items(): # print(key,value)
集合的总结
集合:无序,它里面的元素是可哈希的,它本身是不可哈希的所以它不能作为字典的键(但是可以用)
关系测试,测试两组数据之前的交集、差集、并集等关系。 1,集合的创建。 set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'} 2,集合的增。 set1 = {'alex','wusir','ritian','egon','barry'} set1.add('景女神') print(set1) #update:迭代着增加 set1.update('A') print(set1) set1.update('老师') print(set1) set1.update([1,2,3]) print(set1) 3,集合的删。 set1 = {'alex','wusir','ritian','egon','barry'} set1.remove('alex') # 删除一个元素 print(set1) set1.pop() # 随机删除一个元素 print(set1) set1.clear() # 清空集合 print(set1) del set1 # 删除集合 print(set1) 4,集合的其他操作: 4.1 交集。(& 或者 intersection) set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) # {4, 5} print(set1.intersection(set2)) # {4, 5} 4.2 并集。(| 或者 union) set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7} print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7} 4.3 差集。(- 或者 difference) set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) # {1, 2, 3} print(set1.difference(set2)) # {1, 2, 3} 4.4反交集。 (^ 或者 symmetric_difference) set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8} 4.5子集与超集 set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。 print(set2 > set1) print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。 5,frozenset不可变集合,让集合变成不可变类型。 s = frozenset('barry') print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'> 二,深浅copy 1,先看赋值运算。 l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', 'alex']] print(l2) # [111, 2, 3, ['barry', 'alex']] l1[3][0] = 'wusir' print(l1) # [111, 2, 3, ['wusir', 'alex']] print(l2) # [111, 2, 3, ['wusir', 'alex']] 对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。 2,浅拷贝copy。 l1 = [1,2,3,['barry','alex']] l2 = l1.copy() print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048 l1[1] = 222 print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896 l1[3][0] = 'wusir' print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016 print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016 对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。 3,深拷贝deepcopy。 import copy l1 = [1,2,3,['barry','alex']] l2 = copy.deepcopy(l1) print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 l1[1] = 222 print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 l1[3][0] = 'wusir' print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240 print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
frozenset可以将可变类型转换成不可变类型
set1 = {1,2,3,4}
set2 = frozenset(set1)
print(set2)
类型是frozenset #这样就可以做字典的键了