Python 数据类型

     1 什么是数据?

          x=10,10是我们要存储的数据

      2 为何数据要分不同的类型

        数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示

      3 数据类型

   数字(整形,长整形,浮点型,复数)

  字符串

  字节串:在介绍字符编码时介绍字节bytes类型

  列表

  元组

  字典

  集合

 

     4.数字类型

       整型与浮点型

#一:int
#作用:年龄,级别,等级,身份证号
x=10 #x=int(10)
print(id(x),type(x),x)



#二:float
#作用:工资,身高,体重
salary=3.1 #salary=float(3.1)
print(id(salary),type(salary),salary)

长整型和负数即可

#长整形(了解)
    在python2中(python3中没有长整形的概念):      
    >>> num=2L
    >>> type(num)
    <type 'long'>

#复数(了解)  
    >>> x=1-2j
    >>> x.real
    1.0
    >>> x.imag
    -2.0  
View 长整形 复数

 

     5.字符串

#作用:名字,性别,国籍,地址等描述信息

#定义:在单引号\双引号\三引号内,由一串字符组成
name='egon'

    优先掌握部分:

  按索引取值(正向取+反向取) :只能取

切片(顾头不顾尾,步长)

长度len

成员运算in和not in

移除空白strip

切分split

name='liukuo'
print(type(name),id(name))  # 输出 <class 'str'> 2262633911104
按索引取值(正向取)
print(name[0])
#按索引取值(反向取)
print(name[-1])
print(name[0],type (name[0]))


切片(顾头不顾尾,步长)
print(name[0:3]) #输出 liu
a='hello world'
print(a[1:11])
print(a[1:11:2])  #步长  输出 el ol
print(a[::2])


长度len
a='abcdefg'
print(len(a))  #输出 7


#成员运算in和not in
a='hello world'
print('a' in a )
False
print('h'in a )
True
print('a' not in a )
True
print('h'not in a )
False


移除空白strip
password='   liukuo123  '
password=password.strip( )  #方法一
print(password)
print(password.strip( ))   #方法二
输出 liukuo123

切分 split
user_info='root:x:0:0:root:/root:/bin/bash'
print(user_info[0:4])
输出 root
print(user_info.split(':')[0])  #split是已冒号为分隔符分割 在取第一段
print(user_info.split(':',3))   #输出 ['root', 'x', '0', '0:root:/root:/bin/bash']

cmd='put       a.txt'
print(cmd.split())
输出 ['put', 'a.txt']
filepath='put /a/b/c/d/a.txt'
print(filepath.split('/ '))
输出 ['put ', 'a', 'b', 'c', 'd', 'a.txt']

msg='aaaa bbbb cccc dddd eeee ffff'
print(msg.split()[0])   # split将字符已空格切成块
输出 aaaa


isdigit:用来判断字符是否是由纯数字组成(bytes,unicode)
a='123456'
print(a.isdigit())    # True
b='123456abc'
print(b.isdigit())    #False

常用操作:

msg='***liu****'
print(msg.strip('*'))    #去除所有的*号
print(msg.lstrip('*'))   #去除前面的*号
print(msg.rstrip('*'))   #去除后面的*号

msg='alex_NB'
print(msg.startswith('alex'))  #startswith起始,匹配正确则为真True
print(msg.endswith('NB'))      #endswith止于,匹配正确则为真True


msg='aaaa bbbb cccc aaaa bbbb cccc aaaa bbbb cccc '
print(msg.replace('aaaa','AAAA'))   #replace替换,将aaaa替换为AAAA 替换次数2次(不加次数全部替换)
输出
AAAA bbbb cccc AAAA bbbb cccc aaaa bbbb cccc

占位符
print('my name is %s my age is %s' %('egon',18))
print('my name is {} my age is {}'.format('egon',18))
print('{1} {0} {1}'.format('egon',18))
print('my name is {x} my age is {y}'.format(y=18,x='egon'))
#输出
my name is egon my age is 18
my name is egon my age is 18
18 egon 18
my name is egon my age is 18


split  分解
user_info='root:x:0:0::asdfasdf'
l=user_info.split(':')

join 加入

print(':'.join(l))
print(''.join(l))
print(' '.join(l))


center,ljust,rjust,zerofill
=================egon===================
print('egon'.center(30,'='))
print('egon'.rjust(30,'='))
print('egon'.ljust(30,'='))
print('egon'.zfill(30))



了解部分
find,rfind,index,rindex,count
msg='hello world'
print(msg.find('ell'))#从左到右找,如果有,则返回第一个字符的索引
print(msg.find('easdfasdf'))#从左到右找,如果没有,返回-1

print(msg.index('d',0,3))#从左到右找,如果有,则返回第一个字符的索引
print(msg.index('x'))#从左到右找,如果有,则返回第一个字符的索引

print(msg.count('l',0,4))
print(msg.count('l',0,3))


msg='abc\tdeft'
print(msg.expandtabs(3))


msg='alex Say hello'
print(msg.capitalize())
print(msg.upper())
print(msg.lower())
print(msg.title())
print(msg.swapcase())


is系列
msg='Alex Say Hello'
print(msg.isupper())
print(msg.islower())
print(msg.istitle())


msg='asasdf123'
print(msg.isalnum()) #字符串是由字母或数字组成
msg='asdfasdf'
print(msg.isalpha())


msg='   1'
print(msg.isspace())
msg='aaaai fabc'
print(msg.isidentifier())


判断数字
age=10
inp=input('>>: ').strip()
if inp.isdigit():
    inp=int(inp)
    if inp > age:
        print('ok')

else:
    print('必须输入数字')

num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='' #中文数字
num4=''
num5='' #罗马数字


bytes,unicode
print(num1.isdigit())
print(num2.isdigit())
print(num3.isdigit())
print(num4.isdigit())
print(num5.isdigit())

unicode
print(num2.isdecimal())
print(num3.isdecimal())
print(num4.isdecimal())
print(num5.isdecimal())


unicode,汉字,罗马
print(num2.isnumeric())
print(num3.isnumeric())
print(num4.isnumeric())
print(num5.isnumeric())
View 字符串常用操作

      6.列表

        

作用:多个装备,多个爱好,多门课程,多个账号

定义:[]内可以有多个任意类型的值,逗号分隔

a=[ 'aaa',1234,'abcd',5678 ]

优先掌握的操作:
按索引存取值(正向存取+反向存取):即可存也可以取
print(a[0])     # 正向取
print(a[-1])    #反向取
a[0]='bbbb'     #存字符串
输出 ['bbbb', 1234, 'abcd', 5678]

切片(顾头不顾尾,步长)
print(a[0:3])        #取0到2的字符
print(a[2][0:4:2])   #取第二字段的0到3的字符,步长为2

成员运算in和not in
print('aaa' in a )    #判断字符aaa是否在a列表中
print('bbb' not in a )  #判断字符bbb没有在a列表中

长度
print(len(a))  #打印a列表的长度


追加
a.append('liukuo')   #在a列表中追加liukuo字符串
输出  ['aaa', 1234, 'abcd', 5678, 'liukuo']

删除
del a [5]  #删除a列表的第四个字段,如果字段不存在会报错

print(a.remove('aaa'))  #remove是单纯的删除,不会返回删除的值,并且是按照值去删

b=a.pop(1)  #按照索引取删,默认从末尾开始删

 

常用操作:

a=['aaaa','aaaa','aaaa','bbbb','cccc','dddd',4,5]

# a.insert(0,'liu')   # insert插入,在列表0字段插入字符串'liu'
# a.insert(2,'kuo')

#a.extend([1,2,3,4])   #extend扩大,在列表尾部追加

# b=a.count('aaaa')     #count,计数,统计字符串出现的次数



#了解
# a.clear( )
# print(a)
l=a.copy()
print(l)


#
# my_girl_friends.reverse()
# print(my_girl_friends)

# l=[3,4,-1,2]
# l.sort(reverse=True)
# print(l)




#练习:
#队列:先进先出
#append,pop
# l1=[]
# l1.append('first')
# l1.append('second')
# l1.append('third')
#
# print(l1.pop(0))
# print(l1.pop(0))
# print(l1.pop(0))



#堆栈:先进后出

# l1=[]
# l1.append('first')
# l1.append('second')
# l1.append('third')
#
# print(l1.pop())
# print(l1.pop())
# print(l1.pop())

# l1=[]
# l1.insert(0,'first')
# l1.insert(0,'second')
# l1.insert(0,'third')
# print(l1)
# print(l1.pop(0))
# print(l1.pop(0))
# print(l1.pop(0))
列表 常用操作

 

      7.元组

 

#作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
#定义方式:
ages=(10,12,18,33,18)  #ages=tuple((10,12,18,33))
 print(id(ages),type(ages),ages)


#优先掌握的操作:
# 按索引取值(正向取+反向取):只能取
# 切片(顾头不顾尾,步长)
 print(ages[0:2])
# 长度
 print(len(ages))
# 成员运算in和not in
 print(10 in ages)


#其他操作:
ages=(10,12,18,33,18)
print(ages.index(18))     #index 索引,列表中索引个数
print(ages.index(123123123123))   #索引不存在就报错
print(ages.count(18))   #count,计数,统计字符串出现的次数

   练习:

# l=['a','b','c','d','e']
# # l='abcde'
# l=('a','b','c','d','e')
# index=0
# while index < len(l):
#     print(l[index])
#     index+=1



# l1=['a','b','c','d','e']
# for item in l1:
#     print(item)
# l2='abcde'
# for item in l2:
#     print(item)
# l=('a','b','c','d','e')


# for i in range(1,10,2):
#     print(i)
# l1=['a','b','c','d','e']
# for i in range(len(l1)):
#     print(i,l1[i])



# msg_dic={
# 'apple':10,
# 'tesla':100000,
# 'mac':3000,
# 'lenovo':30000,
# 'chicken':10,
# }
#
# goods_l=[]
# while True:
#     for key in msg_dic:
#         print(key, msg_dic[key])
#     choice = input('商品名>>: ').strip()
#     if choice not in msg_dic:continue
#     count = input('个数>>: ').strip()
#     if count.isdigit():
#         goods_l.append((choice,msg_dic[choice],int(count)))
#         print(goods_l)




#while+else
# for i in range(5):
#     if i == 3:break
#     print(i)
# else:
#     print('ok')
元组练习

 

    8.字典

 

#作用:存多个值,key-value存取,取值速度快

#定义:key必须是不可变类型,value可以是任意类型
d={'a':1}
d={0:1}
# d={[1,2,3]:1} #列表不能当做字典的key
# print(d[0])

info={'name':'liuk','age':18,'sex':'male'} #本质info=dict({....})

#优先掌握的操作:
# 按key存取值:可存可取
# print(info['sex'])
# info['hobbies']=['read','music','play','sleep','eat']   #将hobbies 作为键值存在字典中
# print(info)
#输出 {'name': 'liuk', 'age': 18, 'sex': 'male', 'hobbies': ['read', 'music', 'play', 'sleep', 'eat']}

# 长度len
# print(len(info))   #长度是键值对

# 成员运算in和not in
# print('name' in info )  #只能和键值做成员运算


# 删除
#print(info.pop('name'))     #删除键值对
print(info.pop('name1213',' 自定义'))   #删除不存在的键值,会报错。在后面加上None解释内容就不报错了

# 键keys(),值values(),键值对items()
# print(info.keys())
# print(info.values())
# print(info.items())


# for key in info.keys():
#     print(key)

# for val in info.values():
#     print(val)

# for item in info.items():
#     print(item[0],item[1])

 常用操作:

info={'name':'liuk','age':18,'sex':'male'}
print(info['name'])
print(info.get('name123',123))   #返回指定键的值,如果值不在字典中返回定义的值
print(info.popitem())  #随机返回并删除字典中的一对键和值(一般删除末尾对)
#
#
# for k,v in info.items(): #k,v=('name', 'egon')
#     print(k,v)

# print(info.setdefault('hobbies',['read','music'])) #有则不改,返回已经有的值,没有则新增,返回新增的值
# print(info)

# print(id(info.setdefault('hobbies',[])))
# print(id(info['hobbies']))
l=[]

info={'name':'liuk','age':18,'sex':'male',}
# if 'hobbies' not in info:
#     info['hobbies']=[]
#     info['hobbies'].append('music')
# else:
#     info['hobbies'].append('read')
#
# if 'hobbies' not in info:
#     info['hobbies'] = []
#     info['hobbies'].append('music')
# else:
#     info['hobbies'].append('read')
#
# print(info)

# info.setdefault('hobbies',[]).append('music')
#
# # {'name': 'egon', 'age': 18, 'sex': 'male', 'hobbies': ['music', ]}
# info.setdefault('hobbies',[]).append('read') #['music', ].append('read')
# print(info)


#了解
# info_new={'a':1,'age':19}
# info.update(info_new)
# print(info)


# dic={'name':None,'age':None,'sex':None,'hobbies':None}
# dic1={}.fromkeys(['name','age','hobbies'],None)
# print(dic1)
字典 常用操作

     

两种赋值的方式:

#补充两种赋值方式:
#一:链式赋值
# x=10
# y=x
# x=y=z=10
# print(id(x),id(y),id(z))


#交换两个变量的值
# m=10
# n=20
# temp=n
# n=m #n=10
# m=temp
# print(m,n)
# m,n=n,m
# print(m,n)

#二:从一个数据类型中解压出我们想要的值
# t=(10.3,11.2,12.1,14.3,3.1)

# x,y,z,a,b=t
# print(x,y,z,a,b)

# x,_,_,_,b=t
# print(x,b)
# print(_)

# x,*_,b=t
# print(x,b)


# x,*_='hello'
# print(x)

# x,y,z={'a':1,'b':2,'c':3}
# print(x,y,z)
补充两种赋值的方式

 

      9.集合

# 作用:去重,关系运算,

# 定义:
# 1:每个元素必须是不可变类型(可hash,可作为字典的key)
# 2:没有重复的元素
# 3:无序
# s={1,2,'a','b','c','d','e','f'} #s=set({1,2,'a'})

# print(type(s),s)



# 优先掌握的操作:
# 长度len
# s={1,2,'a','b','c','d','e','f'}
# print(len(s))
# 成员运算in和not in
# print('a' in s)
# for item in s:
#     print(item)



# | 并集
# s1={1,2,3}
# s2={3,4,5}
# print(s1 | s2)

# & 交集
# print(s1 & s2)

# -差集
# print(s1 - s2)
# print(s2 - s1)

# ^ 对称差集
# s1={1,2,3}
# s2={3,4,5}


# ==
# > , >= , <, <= 父集,子集
# s1={1,2,3,4}
# s2={3,4,5}
# print(len(s1) > len(s2))

# s1={1,2,3,4}
# s2={3,4}
# print(s1 > s2)
# print(s1 >= s2)

 

常用操作:

#常用操作
s1={1,2,3,'a',4}
# print(s1.pop()) #随机删,并返回删除的结果

# s1.remove('a') #单纯地删,不会返回删除的结果,并且如果删除的元素不存在则报错
# s1.remove('asdfasdfa') #单纯地删,不会返回删除的结果
# print(s1)
# print(s1.discard('a')) #单纯地删,不会返回删除的结果,并且如果删除的元素不存在返回None,不会报错
# print(s1)

# s1.add('b')
# print(s1)

s1={1,2,3}
s2={4,5}
# print(s1.isdisjoint(s2)) #如果s1和s2没有交集则返回True




#了解
# s1={1,2,3,4}
# s2={3,4,5}


# | 并集
# print(s1.union(s2))

# & 交集
# print(s1.intersection(s2))
# s1.intersection_update(s2) #s1=s1.intersection(s2)
# print(s1)
# -差集
# print(s1.difference(s2))

# ^ 对称差集
# print(s1.symmetric_difference(s2))


# ==
# > , >= , <, <= 父集,子集
# s1={1,2,3,4}
# s2={3,4}
# print(s1.issuperset(s2))
# print(s2.issubset(s1))



#去重
# l=['a','b',1,'a','a']
# print(list(set(l)))

# l=['a','b',1,'a','a']
# l_new=list()
# s=set()
# for item in l:
#     if item not in s:
#         s.add(item)
#         l_new.append(item)
l=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]
l_new=list()
s=set()
for item in l:
    res = (item['name'], item['age'], item['sex'])
    if res not in s:
        s.add(res)
        l_new.append(item)


print(l_new)


#了解:不可变集合
fset=frozenset({1,2,3})
fset.
集合 常用操作

集合练习:

练习:
# pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
#
# linuxs={'wupeiqi','oldboy','gangdan'}
#
# #  1. 求出即报名python又报名linux课程的学员名字集合
# print(pythons & linuxs)
# #   2. 求出所有报名的学生名字集合
# print(pythons | linuxs)
# #   3. 求出只报名python课程的学员名字
# print(pythons -  linuxs)
# #   4. 求出没有同时这两门课程的学员名字集合
# print(pythons ^ linuxs)

 

 本文参考  http://www.cnblogs.com/linhaifeng/articles/7133357.html

       

posted @ 2017-09-10 22:58  刘阔  阅读(164)  评论(0编辑  收藏  举报