标签:
一、python有很多内置数据结构,下面从不同角度将它们分类。
1、单值和集合
单值类型的数据结构一旦生成就无法改变,如果没有被引用了,则被系统回收,如果想改变单值类型的数据结构,python的做法是生成新的数据结构。
单值类型的数据结构在内存中是连续存储的。
a=1 print(id(a)) #2006314800 a=2 print(id(a)) #2006314832 #尝试改变数字a,发现开辟了新的内存空间
集合类型的数据结构是复合而成的,比如
1 a=[1,‘2‘,‘string‘]
2 #由数字和字符串组成的列表
3 b=(1,‘string‘)
4 #由数字和字符串组成的元组
5
6 c=[[‘1‘,‘2‘,‘string‘],‘zhoufeng‘]
7 #由列表和字符串组成的列表
8
9 d={1:(1,‘string‘),2:(2,‘string‘)}
10 #由数字和元组组成的字典
2、按是否有序划分
“有序”是一个很重要的特性,有很多操作围绕“有序”展开,下面列举常见内置数据结构的方法。
二、数据结构方法
补充:方法和函数的区别在于,方法是绑定了类实例(对象)的,因为一个数据结构也是一个对象,所以数据结构拥有方法,具体类的概念后面介绍。
1、数字操作
2、序列通用操作(适用于列表、元组、字符串)
①索引
greeting=‘hello‘
numbers=[1,2,3,4,5,6,7,8,9,10]
print(greeting[0]) #索引从0开始
#h
print(greeting[-1]) #-1表示倒数第一个,这样比较好记忆
#o
②分片
print(greeting[2:4]) #第1个索引是要提取的第1个元素的编号,第2个索引是分片后剩余部分的第1个元素的编号,简而言之,“顾前不顾后”
#11
print(numbers[-3:]) #取倒数3个元素
#[8, 9, 10]
print(numbers[:3]) #取前3个元素
#[1, 2, 3]
print(numbers[0:10:2]) #设置步长为2,步长可以是负数,表示从右到左提取元素
#[1, 3, 5, 7, 9]
③序列加法
#两种相同类型的序列才能够相加
print(‘hello, ‘+‘world‘)
#hello, world
print([1,2,3]+[4,5,6])
[1, 2, 3, 4, 5, 6]
④序列乘法
print([1,2]*5)
#[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
print(‘hello‘*5)
hellohellohellohellohello
⑤成员资格 #存在性检查
print(‘h‘ in ‘hello‘)
True
print(1 in [1,2,3])
True
print(‘zhou‘ in (‘zhou‘,‘feng‘))
True
⑥max、min、len
print(max([1,2,3])) #如果是数字序列,则是比较数值大小
print(max([‘zhou‘,‘feng‘,‘de‘])) #如果是字符,则是比较ASCII大小
print(len([‘zhou‘,‘feng‘,‘de‘,‘shu‘])) #返回序列中元素个数
#4
⑦遍历(迭代) #列表和元组按元素遍历,字符串按字符遍历
lst1=[‘item1‘,‘item2‘,‘item3‘,‘item4‘]
for i in lst1:
if i == ‘item2‘:
print(‘pass‘)
continue
if i == ‘item3‘:
print(‘found!‘)
break
#pass
#found!
3、列表操作
列表实质是一个链表,存储时不要求空间连续,这也是能够修改它的原因。
①list函数 #将任意一个序列(列表、元组、字符串)变成列表
a=list("hello")
print(a)
#[‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]
②元素赋值
x=[1,1,1]
x[1]=2
print(x)
#[1, 2, 1]
③ 删除元素
names=[‘alice‘,‘beth‘,‘cecil‘,‘dee-dee‘]
del names[2]
print(names)
#[‘alice‘, ‘beth‘, ‘dee-dee‘]
④分片赋值
d=[1,2,3,4]
d[-2:]=[5,6]
print(d)
⑤append #在末尾追加新的对象,注意是原地修改,没有生成修改后的副本
list1=[1,2]
list2=[3,4]
list1.append(list2)
print(list1)
#[1, 2, [3, 4]]
⑥extend #扩展,在列表末尾追加另一个序列的多个值,注意是原地修改,没有生成修改后的副本,这点是和序列加法不同的地方
list3=[1,2]
list4=[3,4]
list3.extend(list4)
print(list3)
#[1, 2, 3, 4]
⑦index #通过值取索引,和通过索引取值是相反的过程
list5=[‘we‘,‘are‘,‘winner‘]
print(list5.index(‘are‘))
#1
⑧insert #在指定位置插入元素
list6=[1,2,3,4]
list6.insert(2,‘item‘)
print(list6)
#[1, 2, ‘item‘, 3, 4]
⑨pop #弹出一个元素,如果没有指定下标,默认最后一个
list7=[‘item1‘,‘item2‘,‘item3‘,‘item4‘]
print(list7.pop())
#item4
list8=[‘item1‘,‘item2‘,‘item3‘,‘item4‘]
print(list8.pop(0))
#item1
⑩remove #按值删除元素,如果某个值存在多个,则删除第一个匹配项
list9=[‘my‘,‘name‘,‘is‘,‘zhoufeng‘,‘zhoufeng‘,‘is‘,‘me‘]
list9.remove(‘zhoufeng‘)
print(list9)
#[‘my‘, ‘name‘, ‘is‘, ‘zhoufeng‘, ‘is‘, ‘me‘]
?sort #排序, 原地排序,不会生成排序后的副本,要想不改变原列表,而是生成排序后的副本,可以使用sorted()
list1=[‘a‘,‘s‘,‘d‘,‘f‘,‘g‘,‘x‘]
list1.sort()
print(list1)
#[‘a‘, ‘d‘, ‘f‘, ‘g‘, ‘s‘, ‘x‘]
4、元组操作
①tuple()函数 #将任意的序列变为一个元组
#元组存在的意义:
①可以作为映射的键使用,而列表不可以
②元组作为很多内建函数和方法的返回值存在
5、字符串操作
①字符串格式化
str1=‘%s plus %s equals %s‘ %(1,1,2) #注意字符串在引号中,被格式化的对象不能在引号中,最后一个%是格式化操作符,前面的%都是占位符
print(str1)
#1 plus 1 equals 2
print(‘%s plus %s equals %s‘ %(1,1,2))
#1 plus 1 equals 2
②find #返回子串的索引
str1="this is a test string"
print(str1.find(‘is‘))
#2
③jion #将序列中的元素通过指定的符号连接成一个字符串 #注意序列中的元素必须是字符串
list1=[‘1‘,‘2‘,‘3‘,‘4‘]
print(‘+‘.join(list1)) #为什么不是list1.join(‘+‘) ?
#1+2+3+4
④ lower #将字符串中的大写变为小写,注意并不返回新生成的字符串,print(str1.lower())是错误的。
str1="HELLO WORLD"
str1=str1.lower()
#hello world
⑤replace #替换所有匹配的子串,返回新生成的字符串。
str1=‘this is a test‘
print(str1.replace(‘is‘,‘eez‘))
#theez eez a test
⑥split #按给定的分隔符切割字符串,和join是相反的过程
⑦strip #去掉开头和结尾的空格,并返回新生成的字符串
str2=‘ hello world ‘
print(str2.strip())
#hello world
6、字典操作
#字典是python中唯一的内建映射,由键取值,键可以是数字、字符串、元组
#字典是无序的,for循环遍历元素的时候,是无序输出的
①取所有的键、取所有的值、取所有的元素
dict1={‘name‘:‘zhoufeng‘,‘sex‘:‘man‘,‘age‘:‘26‘}
print(dict1.keys()) #以字符串列表形式输出所有的键
#dict_keys([‘age‘, ‘sex‘, ‘name‘])
print(dict1.values()) #以字符串列表形式输出所有的值
#dict_values([‘26‘, ‘man‘, ‘zhoufeng‘])
print(dict1.items()) #以元组列表的形式输出所有的元素,仅用于for循环当中
#dict_items([(‘age‘, ‘26‘), (‘sex‘, ‘man‘), (‘name‘, ‘zhoufeng‘)])
②遍历字典
dict1={‘name‘:‘zhoufeng‘,‘sex‘:‘man‘,‘age‘:‘26‘}
for key,value in dict1.items():
print(key,value)
print("==============")
#sex man
#==============
#name zhoufeng
#==============
#age 26
#==============
标签:
原文地址:http://www.cnblogs.com/zhoufeng1989/p/5095486.html