Python学习【第2篇】:Python数据结构

1.可变数据类型:列表和字典是可变类型,但是字典中的key值必须是不可变类型)

2.不可变数据类型:数字,字符串,布尔类型,都是不可类型

数字类型

1.bin()函数将十进制转换成而进制

2.oct()函数将十进制转换成八进制

3.hex()函数将十进制转换成十六进制     

    十六进制表示:0-9 a b c d e f

4.数字类型的特性:    

    只能存放一个值  

    一经定义,不可更改

     直接访问

分类:整型,布尔,浮点,复数

字符串类型

1.字符串类型

        判断类型type()

  引号包含的都是字符串类型

    S1='hello world'  s="hello world"

    s2="""hello world"""  

    s3='''hello world'''  

  单引双引没有区别

2.字符串是字符的序列

       字符串是若干字符的序列。

       Python中,索引是从字符串头部算起的一个偏移量,第一个字母的偏移量为0

       a='abcd'

        a[0] 

  • [:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
  •  [start:] 从start 提取到结尾
  •  [:end] 从开头提取到end - 1
  •  [start:end] 从start 提取到end - 1
  •  [start:end:step] 从start 提取到end - 1,每step 个字符提取一个
  •  左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1

6.字符串的常用操作  

       in 判断一个字符串是否在另一个字符串中

  strip()移除空白,也可以去除其他的字符

  s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符

  s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

  slipt()分割,默认以空格分割。也可以以其他的字符分割  

  s='tom,21'

  print s.split(',')

  name,age=s.split(',')

  len()长度  

        切片:如print(x[1:3])也是顾头不顾尾   print(x[0:5:2])#0 2 4

  capitalize()首字母大写

   center()居中显示例如:x='hello'  print(x.center(30,'#'))

   count():计数,顾头不顾尾,统计某个字符的个数,空格也算一个字符  

  endswith()以什么结尾

   satrtswith()以什么开头

   find()查找字符的索引位置,如果是负数,代表查找失败   

  index()索引  

  find()和index()的区别,如下图:

      

  方法1

  a=1

  b=2

  print 'a=%s'% a

  print 'a = %d,b = %s'%(a,b)

  print 'a = %20d,b = %s'%(a,b)

  print '= %.8f,= %s'%(a,b)

  方法2

  format()字符串格式化    

     1.msg='name:{},age:{},sex:{}'           

        print(msg.format('haiyan',18,女))  

      2.msg='name:{0},age:{1},sex:{0}'     

     print(msg.format('aaaaaa','bbbbbb'))    

    3.msg='name:{x},age:{y,sex:{z}'     

     print(msg.format(x='haiyan',y='18',z='女'))  

  isdigit()判断是否是数字

   islower()判断是否是全部小写

   isupper()判断是否是全部大写

   lower()全部转换为小写

   upper()全部转换为大写

   isspace()判断是否是全都是空格

   istitle()判断是否是标题(首字母大写)  

  swapcase()大小写字母翻转

   join()连接  +'.join(['a','b','c'])    print '+'.join(['a','b','c'])    print '/'.join('abc')

   repalce()替换   

     msg='hello alex'   

     print(msg.replace('e'),'A',1)  

     print(msg.replace('e'),'A',2)

   ljust()左对齐   

     X='ABC'    print(x.ljust(10,'*'))

列表

ist 是有序集合

一、创建一个列表

list1 = ["a", "b", "c", "d"];

二、访问列表中的值 用索引来访问list中每一个位置的元素,记得索引是从0开始的

list1 = ['physics', 'chemistry', 1997, 2000];

print "list1[0] print "list1[1:3]


三、更新列表

你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,

l= ['physics', 'chemistry', 1997, 2000];

l[2] = 2001;

l.insert(1, 'Jack')

l.appent(2)

四、删除列表元素

要删除list末尾的元素,用pop()方法

list1 = ['physics', 'chemistry', 1997, 2000];

list1.pop()

要删除指定位置的元素,用pop(i)方法,其中i是索引位置

list1.pop(0)


五、Python列表脚本操作符

列表对 + * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

listt里面的元素的数据类型也可以不同

s = ['python', True, ['asp', 'php'], 1]

六、Python列表截取


序列:(三种类型) 

字符串   不可以修改 

列表list []  可以修改  

元组tuple ()  不可以修改

----特点: 

1.可以进行索引,索引为负数,则从右边开始计数 

2.可以使用切片操作符 [m:n] 

for in : 

forvarinlist #遍历一个列表valueincollection #测试集合中是否存在一个值


七、Python列表操作的函数和方法

列表操作包含以下函数:

1cmp(list1, list2):比较两个列表的元素

2len(list):列表元素个数

3max(list):返回列表元素最大值

4min(list):返回列表元素最小值

5list(seq):将元组转换为列表

列表操作包含以下方法:

1list.append(obj):在列表末尾添加新的对象

2list.count(obj):统计某个元素在列表中出现的次数

3list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

4list.index(obj):从列表中找出某个值第一个匹配项的索引位置

5list.insert(index, obj):将对象插入列表

6list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

7list.remove(obj):移除列表中某个值的第一个匹配项

8list.reverse():反向列表中元素

9list.sort([func]):对原列表进行排序

列表去重复

方法1

ids = [1,2,3,3,4,2,3,4,5,6,1]

newids=[]

for i in ids:

if i not in newids:

newids.append(i)

print newids

方法2

ids = [1,2,3,3,4,2,3,4,5,6,1]

c=set(ids)

print list(c)


以下是列表的常用操作:

l=[1,2,3] #l=list([1,2,3])
# print(type(l))

#pat1===》优先掌握部分
#  索引:l=[1,2,3,4,5]
      print(l[0])  7 #  切片
l=['a','b','c','d','e','f']

# print(l[1:5])
# print(l[1:5:2])
# print(l[2:5])
# print(l[-1])


#了解
# print(l[-1:-4])
# print(l[-4:])
# l=['a','b','c','d','e','f']
# print(l[-2:])

#   追加
# hobbies=['play','eat','sleep','study']
# hobbies.append('girls')
# print(hobbies)

#   删除
hobbies=['play','eat','sleep','study']
# x=hobbies.pop(1) #不是单纯的删除,是删除并且把删除的元素返回,我们可以用一个变量名去接收该返回值
# print(x)
# print(hobbies)

# x=hobbies.pop(0)
# print(x)
#
# x=hobbies.pop(0)
# print(x)

#队列:先进先出
queue_l=[]
#入队
# queue_l.append('first')
# queue_l.append('second')
# queue_l.append('third')
# print(queue_l)
#出队
# print(queue_l.pop(0))
# print(queue_l.pop(0))
# print(queue_l.pop(0))


#堆栈:先进后出,后进先出
# l=[]
# #入栈
# l.append('first')
# l.append('second')
# l.append('third')
# #出栈
# print(l)
# print(l.pop())
# print(l.pop())
# print(l.pop())

#了解
# del hobbies[1] #单纯的删除
# hobbies.remove('eat') #单纯的删除,并且是指定元素去删除


#   长度
# hobbies=['play','eat','sleep','study']
# print(len(hobbies))

#   包含in
# hobbies=['play','eat','sleep','study']
# print('sleep' in hobbies)

# msg='hello world egon'
# print('egon' in msg)


##pat2===》掌握部分
hobbies=['play','eat','sleep','study','eat','eat']
# hobbies.insert(1,'walk')
# hobbies.insert(1,['walk1','walk2','walk3'])
# print(hobbies)

# print(hobbies.count('eat'))
# print(hobbies)
# hobbies.extend(['walk1','walk2','walk3'])
# print(hobbies)

hobbies=['play','eat','sleep','study','eat','eat']
# print(hobbies.index('eat'))


#pat3===》了解部分
hobbies=['play','eat','sleep','study','eat','eat']
# hobbies.clear()
# print(hobbies)

# l=hobbies.copy()
# print(l)

# l=[1,2,3,4,5]
# l.reverse()
# print(l)

l=[100,9,-2,11,32]
l.sort(reverse=True)
print(l)

tuple

另一种有序列表叫元组:tupletuplelist非常类似,但是tuple一旦初始化就不能修改


Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号

t = (1,)

 

#为何要有元组,存放多个值,元组不可变,更多的是用来做查询
t=(1,[1,3],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
# print(type(t))


# #元组可以作为字典的key
# d={(1,2,3):'egon'}
# print(d,type(d),d[(1,2,3)])

 


#     切片
# goods=('iphone','lenovo','sanxing','suoyi')
# print(goods[1:3])



#     长度

#in:
#字符串:子字符串
#列表:元素
#元组:元素
#字典:key

# goods=('iphone','lenovo','sanxing','suoyi')
# print('iphone' in goods)看的是里面的元素在不在里面

# d={'a':1,'b':2,'c':3}
# print('b' in d) 看的是key在不在d里面

 

#掌握
# goods=('iphone','lenovo','sanxing','suoyi')
# print(goods.index('iphone'))
# print(goods.count('iphone'))


#补充:元组本身是不可变的,但是内部的元素可以是可变类型
t=(1,['a','b'],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))

# t[1][0]='A'
# print(t)
# t[1]='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
元组示例

 

python中列表,元组,字符串如何互相转换

1. strlist

list = list(str)


2. liststr

str= ''.join(list)


3. tuple list相互转换 元组不能修改,列表可以修改

tuple=tuple(list)

list=list(tuple)


dict

Python内置了字典:dict的支持在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度

列表也是序列,字符串也是序列

字典

字典类型与序列类型的区别:

1.存取和访问数据的方式不同。

2.序列只能用整数做为索引;

3.字典中索引几乎可以是任意类型

4.映射类型中的数据是无序排列的、字典中的键必须是唯一的,而值可以不唯一

注意:如果字典中的值为数字,最好使用字符串数字形式,如:'age':'040′ 而不用 ‘age':040

1.创建一个字典

d = {} 空字典

dict1={“name”:”jiamingqiang”,tel:”132567890345”,”sex”:”man”}

2.返回字典的长度 len(dict1)

3.添加一项 dict1[“age”]=25

4.如何获取字典对应Kvalue

dict1[“name”]

dict1.get(“name”)

5.如何获取所有的kyevalues

dict1.kyes

dict1.values

6.poppopitem del

pop弹出给定key的项的值,然后在字典中删除该项,popitem弹出任意一项

d.pop(key)

d.popitem() 删除任意项,因字典是无序的

del d[key]

7.判断key是否存在

key in d

d.has_key(key)

a={"name":"2","age":"胡晓燕"}

if "name" in a:

print "huxiaoyan"

if a.has_key("name"):

print "huxiaoyan"

遍历字典

d = {'name':'jia', 'age':'25'}

for key in d:

print key

for key in d.keys():

print key


a='abc'

b='123'

c=zip(a,b)

d1=dict(c)

print d1

八、使用字典的注意事项

1、不能允许一键对应多个值;

2、键必须是可哈希的。

 

list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;

  2. 需要占用大量的内存,内存浪费多。

list相反:

  1. 查找和插入的时间随着元素的增加而增加;

  2. 占用空间小,浪费内存很少。

set

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

l=[1,2,3,3]

s=set(l)

s.add('4')

s.remove(1)

 

字典的表示方法:

info_dic={'name':'haiyna','age':18,'sex':'female'}
# 常用操作:
#
1.存/取
info_dic={'name':'egon','age':18,'sex':'male'}
  print(info_dic['name11111111'])#找不到则报错了
  print(info_dic.get('name',None))
  print(info_dic.get('name222222',None))#get方法找不到不报错,可以自己设定默认值

#pop:key存在则弹出值,不存在则返回默认值,如果没有默认值则报错
# print(info_dic.pop('nam123123123123123123e',None))
# print(info_dic)

# print(info_dic.popitem())
# print(info_dic)

# info_dic['level']=10
# print(info_dic)

#
#     删除
info_dic={'name':'egon','age':18,'sex':'male'}
# info_dic.pop()
# info_dic.popitem()

# del info_dic['name']


#
#     键s,值s,键值对
info_dic={'name':'egon','age':18,'sex':'male'}
# print(info_dic.keys())
# print(info_dic.values())
# print(info_dic.items())

# for k in info_dic:
#     # print(k,info_dic[k])
#     print(k)

# print('========>')
# for k in info_dic.keys():
#     print(k)

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

# for k,v in info_dic.items(): #k,v=('name', 'egon')
#     print(k,v)



#     长度
# info_dic={'name':'egon','age':18,'sex':'male'}
# print(len(info_dic))
#
#     循环
#
#     包含in

# info_dic={'name':'egon','age':18,'sex':'male'}
# print('name' in info_dic)
# print('name' in info_dic.keys())
# print('egon' in info_dic.values())
# print(('name','egon') in info_dic.items())



#掌握
info_dic={'name':'egon','age':18,'sex':'male'}
# info_dic.update({'a':1,'name':'Egon'})
# print(info_dic)

# info_dic['hobbies']=[]
# info_dic['hobbies'].append('study')
# info_dic['hobbies'].append('read')
# print(info_dic)

#setdefault:key不存在则设置默认值,并且放回值默认值
#key存在则不设置默认,并且返回已经有的值

# info_dic.setdefault('hobbies',[1,2])
# print(info_dic)
# info_dic.setdefault('hobbies',[1,2,3,4,5])
# print(info_dic)

# info_dic={'name':'haiyan','age':18,'sex':'male'}

# {'name':'egon','age':18,'sex':'male','hobbies':['study']}
# info_dic.setdefault('hobbies',[]).append('study')

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

# {'name':'egon','age':18,'sex':'male','hobbies':['study','read','sleep']}
# info_dic.setdefault('hobbies',[]).append('sleep')
# l=info_dic.setdefault('hobbies',[])
# print(l,id(l))
# print(id(info_dic['hobbies']))

# print(info_dic)



#了解
# d=info_dic.copy()
# print(d)
# info_dic.clear()
# print(info_dic)


# d=info_dic.fromkeys(('name','age','sex'),None)
# print(d)
# d1=dict.fromkeys(('name','age','sex'),None)
# d2=dict.fromkeys(('name','age','sex'),('egon',18,'male'))
# print(d1)
# print(d2)




# info=dict(name='haiyan',age=18,sex='male')
# print(info)

#
# info=dict([('name','haiyan'),('age',18)])
# print(info)
字典示例

 

一、集合的作用

   知识点回顾:可变类型是不可hash类型,不可变类型是可hash类型

    作用:去重,关系运算

    定义:可以包含多个元素,用逗号分割,集合的元素遵循三个原则:

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

      2.没有重复的元素

      4.无序

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

二、常用方法

    in 和 not in

    |并集(print(pythons.union(linuxs)))

    &交集(print(pythons.intersection(linuxs)))

    -差集(print(pythons.difference(linuxs)))

    ^对称差集(print(pythons.symmetric_difference(linuxs)))

    ==

    >,>= ,<,<= 父集(issuperset),子集(issuberset)

>,>=,<,<= 
set1={1,2,3,4,5}
set2={1,2,3,4}
print(set1 >= set2)
print(set1.issuperset(set2))
 
 
 
set1={1,2,3,4,5}
set2={1,2,3}
print(set1<=set2)
print(set1.issubset(set2))

三、练习

 一.关系运算
  有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  linuxs={'wupeiqi','oldboy','gangdan'}
  1. 求出即报名python又报名linux课程的学员名字集合
  2. 求出所有报名的学生名字集合
  3. 求出只报名python课程的学员名字
  4. 求出没有同时这两门课程的学员名字集合
pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
linuxs={'six','wu','dabao'}
# 1. 求出即报名python又报名linux课程的学员名字集合
    
pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
linuxs={'six','wu','dabao'}
  print(pythons & linuxs)
# 2. 求出所有报名的学生名字集合    
pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
linuxs={'six','wu','dabao'}    
  print(pythons | linuxs)
# 3. 求出只报名python课程的学员名字    
pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
linuxs={'six','wu','dabao'}    
print(pythons - linuxs)
# 4. 求出没有同时这两门课程的学员名字集合    
pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
linuxs={'six','wu','dabao'}    
print(pythons ^ linuxs)

  四、方法    
# ========掌握部分=======    
linuxs={'six','wu','dabao'}    
linuxs.add('xiaoxiao')#说明set类型的集合是可变类型
linuxs.add([1,2,3])#报错,只能添加不可变类型
print(linuxs)
 
# 2.
linuxs={'six','wu','dabao'}    
res=linuxs.pop() #不用指定参数,随机删除,并且会有返回值
print(res)
# 3.
res=linuxs.remove('wupeiqi')#指定元素删除,元素不存在则报错,单纯的删除,没有返回值,
print(res)
# 4.
res=linuxs.discard('egon1111111111') #指定元素删除,元素不存在不报错,单纯的删除,没有返回值,
 
# =========了解部分=========
linuxs={'wupeiqi','egon','susan','hiayan'}
new_set={'xxx','fenxixi'}
linuxs.update(new_set)
print(linuxs)
linuxs.copy()
linuxs.clear()
 
#解压
 
a,*_={'zzz','sss','xxxx','cccc','vvv','qqq'}
print(a)
集合


 

原文地址:https://www.cnblogs.com/mensiler/p/10369765.html