Python基础之数据类型

 一、运算符

  1、算术运算:

  2、比较运算符:

  3、复制运算符:

  4、逻辑运算:

  5、成员运算:

  6、三元运算:

1 result = 值1 if 条件 else 值2

 二、基本数据类型

  1、数字

  2、布尔值

  3、长整型

  4、复数  

三、字符串

 1 strip,lstrip,rstrip
 2 lower,upper
 3 startswith,endswith
 4 format的三种玩法
 5 split,rsplit
 6 join
 7 replace
 8 isdigit
 9 
10 #strip
11 name='*egon**'
12 print(name.strip('*'))
13 print(name.lstrip('*'))
14 print(name.rstrip('*'))
15 
16 #lower,upper
17 name='egon'
18 print(name.lower())
19 print(name.upper())
20 
21 #startswith,endswith
22 name='alex_SB'
23 print(name.endswith('SB'))
24 print(name.startswith('alex'))
25 
26 #format的三种玩法
27 res='{} {} {}'.format('egon',18,'male')
28 res='{1} {0} {1}'.format('egon',18,'male')
29 res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
30 
31 #split
32 name='root:x:0:0::/root:/bin/bash'
33 print(name.split(':')) #默认分隔符为空格
34 name='C:/a/b/c/d.txt' #只想拿到顶级目录
35 print(name.split('/',1))
36 
37 name='a|b|c'
38 print(name.rsplit('|',1)) #从右开始切分
39 
40 #join
41 tag=' '
42 print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串
43 
44 #replace
45 name='alex say :i have one tesla,my name is alex'
46 print(name.replace('alex','SB',1))
47 
48 #isdigit:可以判断bytes和unicode类型,是最常用的用于于判断字符是否为"数字"的方法
49 age=input('>>: ')
50 print(age.isdigit())
字符串的常用操作
 1 find,rfind,index,rindex,count
 2 center,ljust,rjust,zfill
 3 expandtabs
 4 captalize,swapcase,title
 5 is数字系列
 6 is其他
 7 
 8 #find,rfind,index,rindex,count
 9 name='egon say hello'
10 print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引
11 # print(name.index('e',2,4)) #同上,但是找不到会报错
12 print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有
13 
14 #center,ljust,rjust,zfill
15 name='egon'
16 print(name.center(30,'-'))
17 print(name.ljust(30,'*'))
18 print(name.rjust(30,'*'))
19 print(name.zfill(50)) #用0填充
20 
21 #expandtabs
22 name='egon\thello'
23 print(name)
24 print(name.expandtabs(1))
25 
26 #captalize,swapcase,title
27 print(name.capitalize()) #首字母大写
28 print(name.swapcase()) #大小写翻转
29 msg='egon say hi'
30 print(msg.title()) #每个单词的首字母大写
31 
32 #is数字系列
33 #在python3中
34 num1=b'4' #bytes
35 num2=u'4' #unicode,python3中无需加u就是unicode
36 num3='' #中文数字
37 num4='' #罗马数字
38 
39 #isdigt:bytes,unicode
40 print(num1.isdigit()) #True
41 print(num2.isdigit()) #True
42 print(num3.isdigit()) #False
43 print(num4.isdigit()) #False
44 
45 #isdecimal:uncicode
46 #bytes类型无isdecimal方法
47 print(num2.isdecimal()) #True
48 print(num3.isdecimal()) #False
49 print(num4.isdecimal()) #False
50 
51 #isnumberic:unicode,中文数字,罗马数字
52 #bytes类型无isnumberic方法
53 print(num2.isnumeric()) #True
54 print(num3.isnumeric()) #True
55 print(num4.isnumeric()) #True
56 
57 #三者不能判断浮点数
58 num5='4.3'
59 print(num5.isdigit())
60 print(num5.isdecimal())
61 print(num5.isnumeric())
62 '''
63 总结:
64     最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
65     如果要判断中文数字或罗马数字,则需要用到isnumeric
66 '''
67 
68 #is其他
69 print('===>')
70 name='egon123'
71 print(name.isalnum()) #字符串由字母或数字组成
72 print(name.isalpha()) #字符串只由字母组成
73 
74 print(name.isidentifier())
75 print(name.islower())
76 print(name.isupper())
77 print(name.isspace())
78 print(name.istitle())
其它操作
 1 # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
 2 name = " aleX"
 3 # 1)    移除 name 变量对应的值两边的空格,并输出处理结果
 4 # 2)    判断 name 变量对应的值是否以 "al" 开头,并输出结果 5 # 3)    判断 name 变量对应的值是否以 "X" 结尾,并输出结果 6 # 4)    将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
 7 # 5)    将 name 变量对应的值根据 “l” 分割,并输出结果。
 8 # 6)    将 name 变量对应的值变大写,并输出结果 9 # 7)    将 name 变量对应的值变小写,并输出结果10 # 8)    请输出 name 变量对应的值的第 2 个字符?
11 # 9)    请输出 name 变量对应的值的前 3 个字符?
12 # 10)    请输出 name 变量对应的值的后 2 个字符?13 # 11)    请输出 name 变量对应的值中 “e” 所在索引位置?14 # 12)    获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
15 
16 # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
17 name = " aleX"
18 # 1)    移除 name 变量对应的值两边的空格,并输出处理结果
19 name = ' aleX'
20 a=name.strip()
21 print(a)
22 
23 # 2)    判断 name 变量对应的值是否以 "al" 开头,并输出结果24 name=' aleX'
25 if name.startswith(name):
26     print(name)
27 else:
28     print('no')
29 
30 # 3)    判断 name 变量对应的值是否以 "X" 结尾,并输出结果31 name=' aleX'
32 if name.endswith(name):
33     print(name)
34 else:
35     print('no')
36 
37 # 4)    将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
38 name=' aleX'
39 print(name.replace('l','p'))
40 
41 # 5)    将 name 变量对应的值根据 “l” 分割,并输出结果。
42 name=' aleX'
43 print(name.split('l'))
44 
45 # 6)    将 name 变量对应的值变大写,并输出结果46 name=' aleX'
47 print(name.upper())
48 
49 # 7)    将 name 变量对应的值变小写,并输出结果50 name=' aleX'
51 print(name.lower())
52 
53 # 8)    请输出 name 变量对应的值的第 2 个字符?
54 name=' aleX'
55 print(name[1])
56 
57 # 9)    请输出 name 变量对应的值的前 3 个字符?
58 name=' aleX'
59 print(name[:3])
60 
61 # 10)    请输出 name 变量对应的值的后 2 个字符?62 name=' aleX'
63 print(name[-2:])
64 
65 # 11)    请输出 name 变量对应的值中 “e” 所在索引位置?66 name=' aleX'
67 print(name.index('e'))
68 
69 # 12)    获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
70 name=' aleX'
71 a=name[:-1]
72 print(a)
字符串的练习

四、列表

  序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。  

1 list1 = ['李易峰','张艺兴','潘粤明','王思聪','古巨基']
2 
3 # 正向步长
4 print(list1[0:3:1])    # list1 = ['李易峰','张艺兴','潘粤明']
5 # 反向步长
6 print(list1[2::-1])    # list1 = ['潘粤明','张艺兴','李易峰']
7 # 列表翻转
8 print(list[::-1])        # list1 = list1 = ['古巨基','王思聪','潘粤明','张艺兴','李易峰']

五、元祖

  Python的元组与列表类似,不同之处在于元组的元素不能修改。   

 1 #作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
 2 
 3 #定义:与列表类型比,只不过[]换成()
 4 tuple1=('李易峰','张艺兴','潘粤明','王思聪','古巨基')
 5 #优先掌握的操作:
 6 #1、按索引取值(正向取+反向取):只能取
 7 # print(tuple1[0:5:1])   # 正向取值结果:('李易峰', '张艺兴', '潘粤明', '王思聪', '古巨基')
 8 print(tuple1[5::-1])     # 反向取值结果:('古巨基', '王思聪', '潘粤明', '张艺兴', '李易峰')
 9 #2、长度
10 print(len(tuple1))      # 5
11 #3、成员运算in和not in
12 result1 = '李易峰' in tuple1
13 print(result1)  # True
14 result = '李易峰' not in tuple1
15 print(result)   # False
16 #4、循环
17 for i in tuple1:
18     print(i)
示例

# 练习简单购物车,要求如下:

# 实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入

 1 print('欢饮光临,本店供应如下商品,请选购!')
 2 msg_dic={'apple':10,'tesla':100000,'mac':3000,'lenovo':30000,'chicken':10,}
 3 goods_list = []
 4 while True:
 5 
 6     for key,item in msg_dic.items():
 7 
 8         print('goods_name:{name}     goods_price:{price}'.format(name=key,price=item))
 9     choice = input('请输入商品:').strip()
10     if not choice or choice not in msg_dic:
11         print('商品名输入错误,请重试!')
12         continue
13     count = input('请输入个数:').strip()
14     if not count.isdigit():continue
15     goods_list.append((choice,msg_dic[choice],count))
16     print(goods_list)
17     print('购买成功,欢迎下次光临!')
18     break
View Code

 六、字典

  作用:存多个值,key/value存取,取值速度快!  

1 # 常用语法
2 info={'name':'李易峰','age':31,'gender':'male'}
3 info1=dict(name='李易峰',age=31,gender='male')
4 info2=dict([['name','李易峰'],('age',31),('gender','male')])
 1 # 1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
 2 # 即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
 3 a={'k1':[],'k2':[]}
 4 c=[11,22,33,44,55,66,77,88,99,90]
 5 for i in c:
 6     if i>66:
 7         a['k1'].append(i)
 8     else:
 9         a['k2'].append(i)
10 print(a)
11 # 2、统计s='hello alex alex say hello sb sb'中每个单词的个数
12 s='hello alex alex say hello sb sb'
13 list1=s.split()
14 dic={}
15 for item in list1:
16     if item in dic:
17         dic[item]+=1
18     else:
19         dic[item]=1
20 print(dic)
21 # 3、其它做法(setdefault用法)
22 s='hello alex alex say hello sb sb'
23 dic={}
24 words=s.split()
25 print(words)
26 for word in words: #word='alex'
27     dic[word]=s.count(word)
28     print(dic)
29 
30 #利用setdefault解决重复赋值
31 '''
32 setdefault的功能
33 1:key存在,则不赋值,key不存在则设置默认值
34 2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值
35 d={}
36 print(d.setdefault('a',1)) #1
37 d={'a':2222}
38 print(d.setdefault('a',1)) #2222
39 '''
40 s='hello alex alex say hello sb sb'
41 dic={}
42 words=s.split()
43 for word in words: #word='alex'
44     dic.setdefault(word,s.count(word))
45     print(dic)
46 
47 #利用集合,去掉重复,减少循环次数
48 s='hello alex alex say hello sb sb'
49 dic={}
50 words=s.split()
51 words_set=set(words)
52 for word in words_set:
53     dic[word]=s.count(word)
54     print(dic)
常用操作练习

七、集合

  作用:去重,关系运算
  定义集合:集合可以包含多个元素,用都好分割。

  集合元素遵循的三个原则:

    a.每个元素必须是不可变类型(可hash,可作为字典的key)

    b.没有重复的元素

    c.无序

  注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无序纠结于集合中单个字

 1 # 一.关系运算
 2 # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
 3 pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
 4 linuxs={'wupeiqi','oldboy','gangdan'}
 5 # 1. 求出即报名python又报名linux课程的学员名字集合
 6 print(pythons & linuxs)         # {'wupeiqi', 'gangdan'}
 7 # 2. 求出所有报名的学生名字集合
 8 print(pythons | linuxs)         # {'yuanhao', 'gangdan', 'alex', 'oldboy', 'biubiu', 'egon', 'wupeiqi'}
 9 # 3. 求出只报名python课程的学员名字
10 print(pythons - linuxs)         # {'yuanhao', 'egon', 'alex', 'biubiu'}
11 # 4. 求出没有同时这两门课程的学员名字集合
12 print(pythons ^ linuxs)         # {'yuanhao', 'alex', 'oldboy', 'biubiu', 'egon'}
13 
14 # 二.去重
15 #
16 # 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
17 list=['a','b',1,'a','a']
18 print(set(list))
19 # 2.在上题的基础上,保存列表原来的顺序
20 #方法一:不用集合
21 list=[1,'a','b',1,'a']
22 l1=[]
23 for i in list:
24     if i not in l1:
25         l1.append(i)
26 print(l1)
27 #方法二:借助集合
28 l1=[]
29 s=set()
30 for i in list:
31     if i not in s:
32         s.add(i)
33         l1.append(i)
34 print(l1)
35 # 3.去除文件中重复的行,肯定要保持文件内容的顺序不变
36 import os
37 with open('db.txt','r',encoding='utf-8') as read_f,\
38         open('.db.txt.swap','w',encoding='utf-8') as write_f:
39     s=set()
40     for line in read_f:
41         if line not in s:
42             s.add(line)
43             write_f.write(line)
44 os.remove('db.txt')
45 os.rename('.db.txt.swap','db.txt')
46 
47 # 4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
48 list=[
49     {'name':'egon','age':18,'sex':'male'},
50     {'name':'alex','age':73,'sex':'male'},
51     {'name':'egon','age':20,'sex':'female'},
52     {'name':'egon','age':18,'sex':'male'},
53     {'name':'egon','age':18,'sex':'male'}
54 ]
55 s=set()
56 l1=[]
57 for item in list:
58     val=(item['name'],item['age'],item['sex'])
59     if val not in s:
60         s.add(val)
61         l1.append(item)
62 print(l1)
集合练习

八、数据类型总结

  按存储空间的占用分(升序)

1 数字
2 字符串
3 集合:无序(即无序存索引相关信息)
4 元祖:有序(需要存索引相关信息,不可变)
5 列表:有序(需要存索引相关信息,可变,需要处理数据的增删改)
6 字典:无序(需要存keyvalue映射的相关信息,可变,需要处理数据的增删改)

九、运算符  

1 #身份运算(is ,is not)
2 # is比较的是id,而双等号比较的是值,id若相同则值肯定相同,而值相同id则不一定相同
3 x=123456789
4 y=123456789
5 # id(x),id(y)
6 print(x == y)
7 print(id(x)is id(y))

~

 

posted @ 2017-03-06 00:10  Justin067  阅读(240)  评论(0编辑  收藏  举报
TOP