Fork me on GitHub

逆水行舟,不进则退

人与人之间最小的差距是智商,最大的差距是坚持。

python学习日记(基础数据类型及其方法02)

python的变量

python中的变量不需要声明,变量载使用前必须被赋值,变量被赋值以后才会被创建。

在python中变量就是变量,没有数据类型。我们所说的类型是变量所指向内存中的对象的类型。

python允许同时为多个变量赋值

a,b,c = 1,2,'aaa'

基础数据类型

python3中有6个标准的数据类型:使用type()函数可以查看变量所指的数据类型。

不可变数据类型:Number(数字),String(字符串),Tuple(元组)        可变数据类型:List(列表),Dictionary(字典),Set(集合)

一、Number(数字)

int:计算机是二进制,所以有时候用十六进制表示整数比较方便,十六进制用"0x"前缀和0-9,a-f表示,例如:0xff20,0xa3d53,等等。

float:浮点数是因为使用科学计数法的话,小数点位置是可以变动的,比如1.23*10²=12.3*10,对于很大/很小的浮点数,必须用科学记数法表示,10用e表示,1.23*10⁸=1.23e8

或者12.3e7,同理,0.0123可以写作1.23*e-2。

注意:整数和浮点数在计算机内部存储的方式不同,整数运算永远是精确的,浮点数在运算的时候可能会由于四舍五入造成一些误差。

bool:True/False

complex:python支持复数a+bj,a:实部,b:虚部或者complex(a,b),a,b均为浮点型。

二、String (字符串)

字符串用单引号 ' 或双引号 " 括起来,可以使用反斜杠 \ 转义特殊字符。

截取 例:str[1:2]  顾首不顾尾;+ 是字符串的拼接,* 是字符串的复制,*N为复制N次。

转义字符 \ 可以转义很多字符,\n表示换行,\t表示制表符,\本身也要转义就是 \\

如果一个字符串里的所有字符都不需要转义可以用 r '字符串',内部字符不转义

print('hello\n12\t3')
print(r'hello\n123')
print('I\'m"123\tOK"')

三、Tuple (元组) 

元组与列表非常类似,数据不可改变。不可变的tuple的意义就在于代码更加安全。

不过tuple里面如果含有列表,列表的内容是可以修改的,这就造成了一种假象:即tuple可以”改变“。tuple的不变是指每个元素的指向不变,请不要混淆。

理解了”指向不变“后,如果想创建一个内容也不变的元组怎么办呢?那就需要tuple的每个元素本身也不可变。

tuple的歧义:

t2 = (1)#错误定义,定义的不是元组,是1这个数字,产生了歧义
print(t2)
t1 = (1,)#正确定义,加个“,”来消除歧义
print(t1) #显示也会有一个“,”,以免误解成数学计算意义上的括号

四、List (列表) 

列表简介

a = [1,2,3,4,5]
a[0] = 4#改变数据
a[0:2] = [7,8]#改变数据
a[0:3] = [] #选取的内容设为空

列表值可以改变,索引,截取,拼接,重复等

列表增加

append()增加,insert()增加

list = ['a','b','c']#创建列表
print(len(list))#可以用len获取列表的元素个数
print(list[0])#用索引访问列表的元素,超出范围会报错
list.append('d')#使用append()方法向列表中添加元素,默认添加到列表尾部
print(list)
list.insert(0,'e')#还可以用insert()添加到指定的位置
print(list)

索引插入

索引某个元素,插入其前面

employee = ['a','f','d','s']
employee.insert(employee.index('d'),'我在d的前面')
print(employee)

extend()

迭代增加----iterable 可迭代的 

list1 = ['a','f','d','w','e']
list1.extend('三字经')#拆分到元素进行迭代增加(字符串)
print(list1)
list2 = ['a','f','d','w','e']
list2.extend([1,2,3,'三字经',[1,2,3]])#观察运行结果进行对比分析(列表),实现了列表的合并
print(list2)

列表删除

pop()

list.pop() #删除列表末尾的元素,only once
print(list)

list.pop(0) #删除列表指定位置的元素
print(list)

.remove()

删除列表元素

list = ['a','b','c']
list.remove('b')#删除指定的元素
print(list)

.clear()

清空列表

list = ['a','b','c']
list.clear()#清空列表
print(list)

del list

删除列表

list1 = ['a','b','c']
del list1
print(list1)

切片删除

list1 = ['a','b','c','d','e']
del list1[2:]
print(list1)

 列表改:

s = ['a','f','d','w','e']
s[0] = '1'#用赋值去改
print(s)
s[0:2] = '123'#切片迭代,同extend
print(s)
s[0:2] = [1,2,3,4,5,['aa','bb']]
print(s)

排序

.sort()

 

list1 = ['a','f','d','w','e']
print(list1.sort())#无法排序,输出none

list1.sort()#正确输出,默认升序
print(list1)
list1.sort(reverse=True)#降序排序,reverse默认为False
print(list1)

l2 = sorted(list1)#临时排序
print(l2)

list1 = ['a','f','d','w','e']
list1.reverse()#反转输出
print(list1)

列表嵌套

前面有说到。列表可以存储不同的数据类型,比如列表里面包含了另一个列表,那要如何访问呢?

list2 = ['c','d','e']
list1 = ['a','b',list2]
print(list1)
print(list1[2][0])

这样的情况可以看成是一个二维数组,当然,也有,三维、四维..数组等,不过用到的很少。

五、Dictionary (字典)

字典简介

列表是有序的对象集合,字典是无序的对象集合。

两者的区别之处在于:字典中的元素是通过键来存取的,而不是通过偏移存取。

字典是一种映射的类型,用大括号"{}"表示。他是一个无序的  键(key) : 值(value)  对集合,键值key必须用不可变数据类型,同一个字典中键唯一。

内置函数有clear():清空字典内的所有数据keys(),values()

字典基本操作

创建、增加、输出、keys(),values()

dict = {}#创建空字典
dict['name'] = 'Gruffalo' #空字典添加数据
dict['age'] = '21'
print(dict)
print(dict['name'])
print(dict['age']*8)
info = {'name':'polar-bear','age':'4','location':'north pole'}
print(info)
print(info.keys())#显示所有键
print(info.values())#显示所有值

补充:items()

dic1 = {'age':1,'name':'siri','sex':'male'}
print(dic1.items())
#用两个参数搭配for循环进行格式化输出
for k,v in dic1.items():
    print(k,v,end=' *//分割线//* ')#end可以平常随意练习

 增改+1

dic1 = {'age':1,'name':'siri','sex':'male'}
dic1['location'] = 'beijing'#无则增
print(dic1)
dic1['location'] = 'shanghai'#有则改
print(dic1)

.setdefault()方法

dic1 = {'age':1,'name':'siri','sex':'male'}
dic1.setdefault('name')
print(dic1)
dic1.setdefault('location')#没有就添加key,默认value为None
print(dic1)
dic1.setdefault('living','beijing')
print(dic1)

.pop()方法

dic1 = {'age':1,'name':'siri','sex':'male'}
print(dic1)
print(dic1.pop('age'))#指定key去删除,默认返回值value
print(dic1)
print(dic1.pop('age','成功删除'))#指定key去删除,可自定义返回值
print(dic1)

popitem()

dic1 = {'age':1,'name':'siri','sex':'male'}
print(dic1.popitem())#有返回值,返回的元组里面是键值对
print(dic1)
print(dic1.popitem())#有返回值,返回的元组里面是键值对
print(dic1)
#经测,是为随机删除,当前python版本为python3.5.4

del函数

dic1 = {'age':1,'name':'siri','sex':'male'}
del dic1['age']#根据key删除键值对
print(dic1)
del dic1['location']#删除不存在key会报错
print(dic1)

dic1 = {'age':1,'name':'siri','sex':'male'}
dic1.clear()#清空字典
print(dic1)
dic1 = {'age':1,'name':'siri','sex':'male'}
del dic1#删除字典
print(dic1)

.update

dic1 = {'age':1,'name':'siri','sex':'male'}
dic2 = {}
dic2.update(dic1)
print(dic1)
print(dic2)#空字典dict2完全复制字典dict1的所有内容

dic1 = {'age':1,'name':'siri','sex':'male'}
dic3 = {'age':20,'location':'beijing'}
print(dic1)
print(dic3)
dic3.update(dic1)
print(dic3)
#可以看到,具有相同key的,value被覆盖,没有的则添加进去

 遍历输出方式

dic1 = {'age':1,'name':'siri','sex':'male'}
for i in dic1:
    print(i)#默认按key进行输出
for i in dic1.keys():
    print(i)
for i in dic1.values():
    print(i)

如果key不存在的话,就会报错:(引发异常)

info['job']

想要避免报错的话,有两种方法:

1,通过用in 判断key是否存在

print('job' in info)

2,通过dict内置方法get(),如果key不存在,返回none,当然,你也可以自定义返回值

print(info.get('job'))
print(info.get('job','key不存在'))

dict的嵌套

dic = {
    'name':['python','java','c'],
    'web':{
        'html':'123',
        'css':'456',
        'js':'233'
    },
    'location':'beijing'
}
print(dic)
#把location值改为shanghai
dic['location'] = 'shanghai'
print(dic)

dic = {
    'name':['python','java','c'],
    'web':{
        'html':'123',
        'css':'456',
        'js':'233'
    },
    'location':'beijing'
}
print(dic)
#在name 键的value增加一个SQL
dic['name'].append('SQL')
print(dic)

dic = {
    'name':['python','java','c'],
    'web':{
        'html':'123',
        'css':'456',
        'js':'233'
    },
    'location':'beijing'
}
print(dic)
#以下是自己错误使用方法,append()没有返回值,sort(),reverse也是
dic['name'] = dic['name'].append('test')
print(dic)
#sort,reverse也无返回值
s = [1,3,5,2,8,4,6]
print(s.sort())
print(s.reverse())

dic = {
    'name':['python','java','c'],
    'web':{
        'html':'123',
        'css':'456',
        'js':'233'
    },
    'location':'beijing'
}
print(dic)
#把java变成大写
dic['name'][1] = dic['name'][1].upper()
print(dic)
#web里面再添加一键值对'go':'999'
dic['web']['go'] = '999'
print(dic)

dict和list的比较:

dict:1,插入和查找的速度很快,不会随着key的增加而减慢;2,需要占用大量的内存,浪费内存。

list: 1,插入和查找的速度随着元素的增加而增加;2,占用空间小,浪费内存少。

所以,dict是用空间换取时间的一种方法。

六、Set (集合)

set简介

set和dict类似,也是一组key的集合,但没有存储value。由于key值不能重复,所以,在set中,没有重复的key。

s1 = set([1,2,3,4])#创建一个set,需要提供一个list作为输入集合
print(s1)
s2 = set([1,2,2,3,3,5,6,4,2,8,1])#自动过滤重复值
print(s2)

set的基本操作

add()

通过add()方法可以添加元素到set中,可以添加重复的值,但不会有效果。

s1.add(5)
print(s1)
s1.add(2)
print(s1)

update迭代增加

int类型不可迭代

set1 = {1,2,3,4,5}
set1.update('我爱中国')
print(set1)

pop

{1,2,3,4,5,'a','b'}
set1.pop()#随机删除
print(set1)

clear

 {1,2,3,4,5,'a','b'}
set1.clear()#清空集合
print(set1)

del

3,4,5,'a','b'}
del set1#删除集合
print(set1)

remove()

通过remove()方法可以删除元素。

s1.remove(5)
print(s1)

集合运算

可以看成数学上的集合,可以进行相应的集合运算

s1 = set([1,2,3,4])
s2 = set([1,2,2,3,3,5,6,4,2,8,1])
print(s1 - s2)#差集
print(s2 - s1)#差集
print(s2 | s1)#并集
print(s2 & s1)#交集
print(s1 ^ s2)#不同时存在的元素,不要与差集进行混淆

子集与超集

,2,3,4,5}
set2 = {1,2,3,4,5,'a','b'}
print(set1 < set2)#判断set1 是否是 set2的子集
print(set1.issubset(set2))

print(set2 > set1)#判断set2 是否是 set1的超集
print(set2.issuperset(set1))

frozenset

frozenset不可变集合,让集合变成不可变类型。

s = frozenset('好好学习天天向上')
print(s,type(s))

成员测试

s1 = set([1,2,3,4])#观察两个集合区别
if 1 in s1:#引号疑惑(列表元素无引号为整数,不属于字符串,所以条件语句也不能加引号)
    print('1'+'在集合中')
else:
    print('1'+'不在集合中')
a = set('abracadabra')
if 'a' in a:#引号疑惑(字符串引号)
    print('yes')
else:
    print('no')

pass

 

posted @ 2018-11-16 22:55  咕噜牛Gruffalo  阅读(243)  评论(0编辑  收藏  举报