数据类型的总结

字符串的总结

  字符串不能改变(存储方式: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\t123" 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)  
View Code

 

集合的总结

    集合:无序,它里面的元素是可哈希的,它本身是不可哈希的所以它不能作为字典的键(但是可以用)

 

  关系测试,测试两组数据之前的交集、差集、并集等关系。
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来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
View Code

 frozenset可以将可变类型转换成不可变类型

set1 = {1,2,3,4}

set2 = frozenset(set1)

print(set2)

类型是frozenset      #这样就可以做字典的键了

 

posted @ 2018-03-26 17:30  Coca-Mirinda  阅读(305)  评论(0编辑  收藏  举报