python基本数据类型
1.数值
a,b,c,d=100,22.28,True,3+1j print(type(a)) # <class 'int'> print(type(b)) # <class 'float'> print(type(c)) # <class 'bool'> print(type(d)) # <class 'complex'> print(isinstance(a,int)) # True print(isinstance(b,complex)) # False print(abs(y)) # 取绝对值 print(divmod(x,y)) # 生成元组(取除,取余)
2.字符串
1) 创建字符串
str = 'Hello world' str1 = "hello python" print(type(str),type(str1)) # <class 'str'> <class 'str'>
2)访问字符串
str = 'Hello world' print(str[0]) # H print(str[0:]) # Hello world print(str[1:7]) # ello w print(str[1:-1]) # ello worl
3)字符串更新
str = 'Hello world' print(str + ' over') # Hello world over
4) 字符串运算符
a = 'Hello' b = 'world' print(a+b) # Helloworld print(a*2) # HelloHello if 'H' in a: print('H在a中') # H在a中 if 'h' not in a : print('h不在a中') # h不在a中
5)字符串格式化
print('我叫%s,今年%d岁,身高%.2f米' %('小明',10,1.250)) # 我叫小明,今年10岁,身高1.25米 # 三引号 para_str = """这是一个多行字符串的实例 多行字符串可以使用制表符 TAB [\t] 。 也可以使用换行符 [\n]。 """ print (para_str)
6)字符串中的相关函数(大多数可以用正则实现)
str = '#slitobo' print(len(str)) # 字符串的长度 print(str.capitalize()) #首字母大写 print(str.find('y')) # 存在返回0,不存在返回-1 print(str.replace(str,'TTT')) # 替换 print(str.startswith('#')) # 以“#”开头的 True print(str.endswith('o')) # 以“o” 结束 True # 将元素以指定字符生成一个新的字符串 s1 = "-" s2 = "" seq = ("r", "u", "n", "o", "o", "b") # 字符串序列 print (s1.join( seq )) print (s2.join( seq )) # 分割生成列表 >>> 'slito,26,hz,182'.split(',') ['slito', '26', 'hz', '182'] # format格式化 >>> '我的名字是:{0},我的年龄是:{1}'.format('slito',1) '我的名字是:slito,我的年龄是:1' >>> '我的名字是:{0},我的年龄是:{1}'.format('slito',100) '我的名字是:slito,我的年龄是:100' >>> '我的名字是:{0},我的年龄是:{1:d}'.format('slito',100) '我的名字是:slito,我的年龄是:100' >>> '我的名字是:{0},我的年龄是:{1:5d}'.format('slito',100) '我的名字是:slito,我的年龄是: 100' >>> '我的名字是:{0},我的年龄是:{1:05d}'.format('slito',100) '我的名字是:slito,我的年龄是:00100' >>> '我的名字是:{0},我的年龄是:{1:<5d}'.format('slito',100) '我的名字是:slito,我的年龄是:100 ' >>> '我的名字是:{0},我的年龄是:{1:>5d}'.format('slito',100) '我的名字是:slito,我的年龄是: 100' >>> '我的名字是:{0},我的年龄是:{1:^5d}'.format('slito',100) '我的名字是:slito,我的年龄是: 100 ' >>>'{name:s}说:卧室{name:s},我的身高是{heigt:.2f}'.format(name='kk',heigt=1.68) 'kk说:卧室kk,我的身高是1.68'
3.列表
以[ ]标示,内部元素以逗号区分,操作方式与string一致,且可以更改元素内容
1)创建列表
list1 = ['Google', 'Runoob', 1997, 2000] list2 = [1, 2, 3, 4, 5 ] print (list1[0]) # Google print (list2[1:5]) # [2, 3, 4, 5]
2)更新列表(改,删,增)
list = ['Google', 'Runoob', 1997, 2000] # 改变元素 list[1] = 'baidu' print(list) # ['Google', 'baidu', 1997, 2000] # 删除元素 del list[1] print(list) # ['Google', 1997, 2000] # 增加元素 list.append('newadd') print(list) # ['Google', 1997, 2000, 'newadd']
3)列表的方法
# 查找列表对象索引 list.index(obj,[start,[stop]]),默认从0开始 a=['test','bobo','slito'] b=a.index('bobo') print("bobo的位置是:",b) #bobo的位置是: 1 # 将对象插入列表 list.insert(index,obj) a=['test','bobo','slito'] a.insert(3,'new') print(a) # ['test', 'bobo', 'slito', 'new'] # 依靠索引移除列表元素list.pop([index=-1]),默认是-1,即最后一个元素 a=['test','bobo','slito'] a.pop() print(a) # ['test', 'bobo'] a.pop() print(a) # ['test'] # 移除列表中的一个元素(默认第一个元素),并且返回该元素的值 list.remove(obj) a=['test','bobo','slito'] a.remove('test') print(a) # ['bobo', 'slito'] # 反向列表中元素 list.reverse() a=['test','bobo','slito'] a.reverse() print(a) # ['slito', 'bobo', 'test'] # 清空列表 list.clear() a=['test','bobo','slito'] a.clear() print(a) # [] # 列表排序 list.sort() # list.sort(cmp=None, key=None, reverse=False) reverse=False升序True降序 a=[3,1,2] a.sort() print(a) # [1, 2, 3] a.sort(reverse=True) print(a) # [3, 2, 1]
#统计列表中项目存在的个数list.count()
   >>> list1 = [1,2,2,5,5,8,5]
   >>> list1.count(2)
   2
   >>> list1.count(5)
   3
   >>> list1.count('xxx')
   0
# 复制 list1 = [1,2,3,4] # 引用复制,共用同一内存中的数据 list2 = list1 list1[0] = 9 print(list1) # [9, 2, 3, 4] print(list2) # [9, 2, 3, 4] # 复制,两份独立的内存空间 list3 = list1.copy() list1[0] = 8 print(list1) # [8, 2, 3, 4] print(list3) # [9, 2, 3, 4]
列表生成式
>>> [i ** 2 for i in range(1,10) if i % 2 == 0]
[4, 16, 36, 64]
4.元组
元组与列表使用方法一样,以()标示,内部以逗号区分,但是不能修改元组内的值。
a = (1,2,3,4) print(type(a)) # <class 'tuple'>
5.集合
无序不重复的序列。用于成员关系测试,删除重复元素。两种设置方法,
# 第一种以{}标示,逗号隔离元素 student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'} print(student) # {'Jack', 'Jim', 'Mary', 'Tom', 'Rose'} # 第二种是以set(value),创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 a = set('abracadabra') b = set('alacazam') print(a) # {'r', 'a', 'c', 'b', 'd'} print(b) # {'m', 'a', 'c', 'l', 'z'} print(a-b) #差集 {'d', 'b', 'r'} print(a|b) #并集 {'m', 'r', 'a', 'c', 'b', 'd', 'l', 'z'} print(a&b) #交集 {'a', 'c'} print(a^b) #a,b中不同时存在的元素 {'d', 'l', 'r', 'm', 'z', 'b'}
集合中的对象是要可hash的不可变的类型,list和dict都是不可hash的类型
a=[1,[1,3],'test'] s=set(a) #TypeError: unhashable type: 'list' a=[1,{1:3},'test'] s=set(a) #TypeError: unhashable type: 'dict'
集合中的对象是无须排列的,可以使用“in”判断对象是否存在于集合中
a=[1,3,'test'] s=set(a) print(s,type(s)) # {'test', 1, 3} <class 'set'> print(1 in s) # True print(2 in s) # False
add用于添加一个元素,update 用于添加多个(可以使用list等)
a=set('test1t') print(a) # {'s', 't', 'e', '1'} a.add('u') print(a) # {'t', '1', 'e', 's', 'u'} a.update('ops1') print(a) # {'o', 't', 'p', '1', 'e', 's', 'u'} a.update([12,'ops2']) print(a) # {'t', 's', 'o', 12, 'u', 'e', 'ops2', '1', 'p'}
6.字典
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
dict1 = {'name':'slitobo','age':'10'}
print(type(dict1))  # <class 'dict'>
print(dict1)    # {'name': 'slitobo', 'age': '10'}
1) 字典的增,删,改,查和列表的一样,只不过是加上key
dict1 = {'name':'slitobo','age':'10'}
# 查看
print(dict1['name'])
# 增加
dict1['gender']='female'
print(dict1['gender']) # female
# 修改
dict1['gender']='male'
print(dict1['gender']) # male
# 删除
del dict1['gender']
print(dict1)    # {'name': 'slitobo', 'age': '10'}
# 删除整个字典
del dict1
print(dict1)    # NameError: name 'dict1' is not defined
2) 字典相关的方法
dict1 = {'name':'slitobo','age':'10'}
# 字典的长度
print(len(dict1)) # 2
# dict.clear()清空字典内所有的元素
dict1.clear()
print(dict1) # {} 空字典
# dict.fromkeys()
# 创建一个新字典fromkeys(seq [,value])
# seq 是一个字典键表()
# value是值
seq = ['name','age']
value = 10
dict = dict.fromkeys(seq)
print(dict) # {'name': None, 'age': None}
dict = dict.fromkeys(seq,value)
print(dict) # {'name': 10, 'age': 10}
# key in dict
print('name' in dict)   # True
# dict.items()
# 返回可遍历的元组(键,值)
dict = {'Name': 'Runoob', 'Age': 7}
print(dict.items()) # dict_items([('Name', 'Runoob'), ('Age', 7)])
for i,j in dict.items():
        print(i,":\t",j) ''' Name :     Runoob
                            Age :     7  '''
dict1 = {'name':'slitobo','age':'10'}
# dict.get(key,[value])
# 返回指定键的值,没有键则返回,None
print(dict1.get('name'))    # slitobo
print(dict1.get('gender'))  # None
#dict.setdefault(key,[value])
>>> me
{1: 'abc', 2: 't', 3: 'yt'}
>>> me.setdefault(4)
>>> me
{1: 'abc', 2: 't', 3: 'yt', 4: None}
>>> me.setdefault(5,'test')
'test'
>>> me
{1: 'abc', 2: 't', 3: 'yt', 4: None, 5: 'test'}
>>
# dict.keys() # 以列表形式返回所有的键 print(dict1.keys()) # dict_keys(['name', 'age']) # dict.values() # 以列表形式返回所有的值 print(dict1.values()) # dict_values(['slitobo', '10']) # dict.update() # 将一个字典中的值更新到另一个字典中 dict1 = {'name':'slitobo','age':'10'} dict2 = {'gender':'male','address':'104 Road'} dict1.update(dict2) print(dict1) # {'name': 'slitobo', 'age': '10', 'gender': 'male', 'address': '104 Road'} # dict.pop() # 返回被删除键的值 dict1 = {'name':'slitobo','age':'10'} print(dict1.pop('name')) # slitobo # dict.popitem() # 返回被删除key-value site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'} pop_obj=site.popitem() print(pop_obj) # ('url', 'www.runoob.com') print(site) # {'name': '菜鸟教程', 'alexa': 10000}
字典生成式:
>>> d1 = {'a':2,'b':3}
>>> { k:v for k,v in d1.items() if v % 2== 0}
{'a': 2}
拷贝
dict1 = {'a': 1, 'b':2, 'c':3}
dict2 = dict1
dict1['a'] = 2
print(dict1) # {'a': 2, 'b':2, 'c':3}
print(dict2) # {'a': 2, 'b':2, 'c':3}

浅拷贝
dict1 = {'a': 1, 'b':2, 'c':[1, 2]}
dict2 = dict1.copy()
dict1['a'] = 2
print(dict1) #  变了 {'a': 2, 'b':2, 'c':[1, 2]}
print(dict2) #  没变 {'a': 1, 'b':2, 'c':[1, 2]}
dict1['c'].append(3) 
print(dict1) #  变了{'a': 2, 'b':2, 'c':[1, 2,3]}
print(dict2)  #  变了 {'a': 1, 'b':2, 'c':[1, 2,3]}

深拷贝
>>> import copy >>> dict1 = {'a': 1, 'b':2, 'c':[1, 2]} >>> dict2 = copy.deepcopy(dict1) >>> dict1['a']=2 >>> dict1['c'].append(3) >>> dict1 {'a': 2, 'b': 2, 'c': [1, 2, 3]} >>> dict2 {'a': 1, 'b': 2, 'c': [1, 2]}
 
7.三目运算符
b if a else c : 如果a为真,返回b,否则返回c
a and b or c: 如果a为真,返回b,否则返回c

                
            
        
浙公网安备 33010602011771号