Python 常见数据结构

一 字符串:通过下标获取元素  
声明变量 str=''
str(x)


(1) 字符串元素
字符索引:[indexId]  
>>> var1 = "Hello world"
>>> var2 = "Python Rnnob"

>>> print "var1[0]",var1[0]
var1[0] H

字符串截取成子串:[start,end]
>>> print "var2[1:5]",var2[1:5]
var2[1:5] ytho

[:n]: 获取n(从0开始索引)之前的所有元素
>>> concatStr = var1[:6]+'Runnoob'
>>> print concatStr


[:-1] :上界为1(下标从0开始),下界(-1为字符串长度)开始截取元素
>>> concatStr = var1[:6]+'Runnoob'
>>> print concatStr

>>> print concatStr[:-1]
Hello Runnoo

[1:-1] :上界为第二个元素,下界(字符串长度)
Hello Runnoo
>>> print concatStr[1:-1]
ello Runnoo

转义字符:
转义字符    描述
\(在行尾时)    续行符
\\    反斜杠符号
\'    单引号
\"    双引号
\a    响铃
\b    退格(Backspace)
\e    转义
\000    空
\n    换行
\v    纵向制表符
\t    横向制表符
\r    回车
\f    换页
\oyy    八进制数,yy代表的字符,例如:\o12代表换行
\xyy    十六进制数,yy代表的字符,例如:\x0a代表换行
\other    其它的字符以普通格式输出


转义:
转义字符串:
>>> print "abcd \" nedfg"
abcd " nedfg

转义单引号
>>> print "abcd \' nedfg"
abcd ' nedfg

扫描二维码关注公众号,回复: 2491764 查看本文章

纵向制表符(换向)
>>> print "abcd \v nedfg"
abcd 
      nedfg

转义回车
>>> print "abcd \r nedfg"
 nedfg


转义换页
>>> print "abcd \f nedfg"
abcd 
      nedfg

(2)字符串操作

a:字符串拼接:
>>> var1 = "Hello world"
>>> var2 = "Python Rnnob"
>>> concat = var1+var2

>>> print concat
Hello worldPython Rnnob

b:索引字符串元素 [start:end] 
>>> var1 = "Hello world"

c:第一个元素
>>> print var1[1]
e

d:第二个至第五个
>>> print var[1:4]
yth


>>> print var[1:-1]
ython Rnno

e:判断元素是否存在: exist noexist
存在
>>> if "H" in var1:
...   print "existence"
... else:
...   print "no" 
existence

不存在
>>> if("M" not in var1):
...    print "no existence"
... else:
...    print "existences"
 
no existence

f: 格式化输出
>>> print "My name is %s and weight is %d" %('zara',23)
My name is zara and weight is 23

(3)字符串格式化输出
python字符串格式化符号:
    符   号    描述
      %c     格式化字符及其ASCII码
      %s     格式化字符串
      %d     格式化整数
      %u     格式化无符号整型
      %o     格式化无符号八进制数
      %x     格式化无符号十六进制数
      %X     格式化无符号十六进制数(大写)
      %f     格式化浮点数字,可指定小数点后的精度
      %e     用科学计数法格式化浮点数
      %E     作用同%e,用科学计数法格式化浮点数
      %g     %f和%e的简写
      %G     %f 和 %E 的简写
      %p     用十六进制数格式化变量的地址

a.格式化输出: 字符串,整型,浮点数
>>> print "My name is %s ,age is %d,have money %2f",('zara',12,12.00)
My name is %s ,age is %d,have money %2f ('zara', 12, 12.0)


b.多个变量进行格式数据
>>> print "My name is %(name)s ,age is %(age)d,have money %(money).4f" %{'name':'zara','age':12,'money':12.34533434}
My name is zara ,age is 12,have money 12.3453


>>> print "My name is %s ,age is %d,have money %.4f" %('zara',12,12.3343343)
My name is zara ,age is 12,have money 12.3343


c.计算保留两位小数(四舍五入)
四舍五入:
>>> var=round(12343.510034,2)
>>> print var
12343.51

四舍五入:
>>> round(12.3434,2)
12.34


使用Decimal保留两位小数(四舍五入)
>>> from decimal import Decimal 
>>> Decimal('5.02609').quantize(Decimal('0.00'))
Decimal('5.03')


科学计数法:
>>> print "原数:%d,科学计数:%e" %(1000000000,1000000000)
原数:1000000000,科学计数:1.000000e+09


>>> print "原数:{:d},科学计数:{:e}".format(1000000000,1000000000)
原数:1000000000,科学计数:1.000000e+09

d:format方式

格式:
[[fill][align][sign][#][0][width][,][.precision][type]
 
参数:

fill 【可选】空白处填充的字符
align 【可选】对齐方式(需配合width使用)
<,内容左对齐
>,内容右对齐(默认)
=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
,内容居中
sign 【可选】有无符号数字
+,正号加正,负号加负;
-,正号不变,负号加负;
空格 ,正号空格,负号加负;
# 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
, 【可选】为数字添加分隔符,如:1,000,000
width 【可选】格式化位所占宽度
.precision 【可选】小数位保留精度
type 【可选】格式化类型
传入” 字符串类型 “的参数
s,格式化字符串类型数据
空白,未指定类型,则默认是None,同s
传入“ 整数类型 ”的参数
b,将10进制整数自动转换成2进制表示然后格式化
c,将10进制整数自动转换为其对应的unicode字符
d,十进制整数
o,将10进制整数自动转换成8进制表示然后格式化;
x,将10进制整数自动转换成16进制表示然后格式化(小写x)
X,将10进制整数自动转换成16进制表示然后格式化(大写X)
传入“ 浮点型或小数类型 ”的参数
e, 转换为科学计数法(小写e)表示,然后格式化;
E, 转换为科学计数法(大写E)表示,然后格式化;
f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
g, 自动在e和f中切换
G, 自动在E和F中切换
%,显示百分比(默认显示小数点后6位)


>>> print "原数:{:d},科学计数:{:e}".format(1000000000,1000000000)
原数:1000000000,科学计数:1.000000e+09


二.元组: 与字符串同,都是序列:同列表相似,不同之处在于元组不能修改,列表可以add,append
a.声明 tup= ()  (元组用()表示)

b.定义声明元组:因为无法修改,一般用来赋值进行迭代计算
>>> tup1=(40,23,34,'34')
>>> tup2=(23,)
>>> tup3=()
>>> 

c.截取元组 : 
>>> print tup1[1:3]
(23, 34)

d.获取元素
>>> print tup2[0]
23
>>> 
>>> tup4=tup1+tup2
>>> 
>>> print tup4
(40, 23, 34, '34', 23)
>>> 

e:因为无法修改(增加,删除)元组元素,但是可以删除元组本身
>>> print tup4
(40, 23, 34, '34', 23)
>>> del tup4
>>> print tup4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'tup4' is not defined
 
f: 元组拼接
>>> tup4=tup1+tup2
>>> print len(tup4)

g:元组长度
5
>>> print tup1+tup2
(40, 23, 34, '34', 23)
>>> 
>>> print tup4*2
(40, 23, 34, '34', 23, 40, 23, 34, '34', 23)
>>> 

h:判断元素是否存在,不存在
>>> print 40 in tup4
True
 
>>> 40 in tup4
True
 
>>> 40 not in tup4
False

i: 重复构造该变量多次
>>> print tup4*3
(40, 23, 34, '34', 23, 40, 23, 34, '34', 23, 40, 23, 34, '34', 23)
>>> 

j: 迭代元组

>>> for x in tup4:
...  print x
 
40
23
34
34
23


k:索引元素
>>> tup1=(23,34,20,29,38)
>>> tup2=(1,2,3.00,32,90)
>>> tup4=tup1+tup2
>>> print tup4
(23, 34, 20, 29, 38, 1, 2, 3.0, 32, 90)
>>> 
获取下标为2的元素
>>> print tup4[2]
20

获取从右边offset 为2的元素
>>> print tup4[-2]
32

获取下标为1 以及之后的元素
>>> print tup4[1:]
(34, 20, 29, 38, 1, 2, 3.0, 32, 90)
>>> 


l:比较两个元素操作
>>> tup11=(23,34)
>>> tup22=(23,34)

如果相等,则为0
>>> print cmp(tup11,tup22)
0
>>> tup22=(23,33)
>>> tup11=(23,314)

如果不等,则为1
>>> print cmp(tup11,tup22)
1
>>> 


获取元素的最大值
>>> print max(tup4)
90

获取元素的最小值
>>> print min(tup4)
1
>>> 
>>> list=[23,34,343,30]

列表转化为Tuple
>>> print tuple(list)
(23, 34, 343, 30)


三.列表:  元素可重复
a.声明 list=[]

b.获取列表元素
>>> list1 = ['pysics','chemistry',1997,2000]
>>> list2 = [1,2,3,4,5,6,7]
>>> 
>>> print('list1[0]',list1[0])
list1[0] pysics
>>> 
>>> print('list2[1:5]',list1[1:5])
list2[1:5] ['chemistry', 1997, 2000]
>>> 
>>> 
>>> print('list1[0]',list1[0])
list1[0] pysics
>>> print('list1[1:5]',list1[1:5])
list1[1:5] ['chemistry', 1997, 2000]
>>> 
>>> print('list2[0:5]',list2[0:5])
list2[0:5] [1, 2, 3, 4, 5]

c.修改列表元素


1.增加元素:
>>> list3 = []
>>> list3.append('Google')
>>> list3.append('Runnob')
>>> 
>>> print(list3)
['Google', 'Runnob']


2.(根据列表元素下标)删除列表元素
>>> list4 = ['physics','chemistry',1993,2000]
>>> del list4[0]
>>> print(list4)
['chemistry', 1993, 2000]

3.删除列表所有元素
>>> list4 = ['physics','chemistry',1993,2000]

>>> print(list4)
['physics', 'chemistry', 1993, 2000]

>>> del list4
 
>>> print('After deleting value at index 2: ')
After deleting value at index 2: 
删除后无法引用
>>> print(list4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'list4' is not defined

4.API
a.长度
>>> list4 = ['physics','chemistry',1993,2000]
>>> len(list4)
4

b.重复显示
>>> list4*2
['physics', 'chemistry', 1993, 2000, 'physics', 'chemistry', 1993, 2000]

c.判断元素是否存在,不存在 于列表
>>> 2000 in list4
True
>>> 12000 in list4
False
>>> 
>>> 12000 not in list4
True

e:迭代
>>> for i in list4:
...   print(i)
... 
physics
chemistry
1993
2000

f:判断集合内容是否相等
>>> list4 = ['physics','chemistry',1993,2000]
>>> list5 = list4*2
>>> 
>>> cmp(list4,list5)
-1
>>> cmp(list4,list4)
0


g: 3.5导入operator,比较两集合内容是否相等
>>> import operator
>>> operator.eq(list4,list5)
False
>>> 
>>> operator.eq(list4,list4)
True
>>> 
>>> list4.count(1993)
1
>>> list4.count('physics')
1


>>> list5
['physics', 'chemistry', 1993, 2000, 'physics', 'chemistry', 1993, 2000]

索引集合某个元素的下标:
>>> print(list5.index(1993))
2

在特定的下标将新元素插入
>>> list5.insert(2,3)
>>> list5
['physics', 'chemistry', 3, 1993, 2000, 'physics', 'chemistry', 1993, 2000]

删除集合某个元素
>>> list5.remove(3)

h:API操作
>>> list6 = [1,3,3,5,6,7]

在集合后面添加集合
>>> list6.extend([23,3]
... )
>>> list6.extend((233,33))

集合排序-默认升序
>>> list6.sort()
>>> list6
[1, 3, 3, 3, 5, 6, 7, 23, 33, 233]

集合排序--设置降序
>>> list6.sort(reverse=True)
>>> list6
[233, 33, 23, 7, 6, 5, 3, 3, 3, 1]
>>> 

按照某个key排序集合元素
>>> def takeSecond(elem):
...     return elem[1]
... 
>>> random = [(2,3),(3,4),(4,2),(1,3)]
>>> 
>>> random.sort(key=takeSecond)
>>> print(random)
[(4, 2), (2, 3), (1, 3), (3, 4)]
>>> random
[(4, 2), (2, 3), (1, 3), (3, 4)]
>>> sortedRandom=random.sort(key=takeSecond)


四.集合:无序不可重复元素
a.集合,元组转换为set
>>> list1
[1, 12, 3, 3, 33, 33]
>>> 
>>> tup1 = (2,34,34,34)
>>> tup1
(2, 34, 34, 34)
>>> s={1}

b.转换为集合set
>>> s=set(tup1)
>>> s
{2, 34}
>>> list1
[1, 12, 3, 3, 33, 33]
>>> 
>>> list1
[1, 12, 3, 3, 33, 33]
>>> tup1
(2, 34, 34, 34)
>>> 
>>> s={1}


>>> s=set(s)
>>> s
{1}
>>> s=set(tup1)

c.元组转换为集合会进行去重:
>>> distinctSet=set(tup1)
>>> distinctSet
{2, 34}

d.定义集合后会进行去重
>>> s1 = {12,3,3,3,'a'}
>>> s1
{3, 12, 'a'}
>>> s1.add(233)
>>> s1
{233, 3, 12, 'a'}

e.更新集合元素 (参数可以是 集合,元组,字典;参数可以有多个,用逗号(,)分隔
>>> s1.update([39,399])
>>> s1
{3, 39, 233, 12, 399, 'a'}


>>> s1.update([39,399],[396,389])
>>> s1
{389, 39, 396, 399, 'a'}

不可更新单个元素
>>> s1.update(39)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 
>>> s1
{3, 39, 233, 12, 399, 'a'}

#删除元素
>>> s1.discard(39)
>>> s1
{3, 233, 12, 399, 'a'}

删除的元素不存在,不会返回错误
>>> s1.discard('b')
>>> s1
{3, 233, 12, 399, 'a'}
>>> 

删除集合中存在的元素,建议用discard(不会报错)
>>> s1.remove(12)
>>> s1
{3, 233, 399, 'a'}
>>> 
 
随机删除集合元素
>>> s1.pop()
3
>>> s1.pop()
233
>>> s1
{399, 'a'}

f.集合操作(并集,交集,非对称差集(以左边为参照) ,对称差集(以双方为参照),右边参数 也可以是列表,元组,字典。

判断某个元素是否存在,不存在集合
>>> 3 in s1
True
>>> 3 not in s1
False
>>> 
>>> s2 = {3,34,'b',30}
>>> s1
{3, 12, 'a'}
>>> s2
{34, 3, 'b', 30}


并集
>>> s1.union(s2)  
{34, 3, 12, 'b', 30, 'a'}

交集
>>> s1.intersection(s2)
{3}


非对称差集(以左边为参照), 右边参数 也可以是列表,元组,字典。
>>> s1.difference(s2)
{12, 'a'}

对称差集(以左边,右边双边为参照),右边参数 也可以是列表,元组,字典。
>>> s1.symmetric_difference(s2)
{34, 12, 'b', 'a', 30}
>>> s1
{3, 12, 'a'}
>>> s2
{34, 3, 'b', 30}
>>> 
>>> s1.difference(s2)
{12, 'a'}
>>> s3={3}

#判断左边是否为右边的子集,右边参数 也可以是列表,元组,字典。
>>> s1.issubset(s3)
False


>>> s3.issubset(s1)
True
>>> 
 
判断左边是否为右边的父集,右边参数 也可以是列表,元组,字典。
>>> s1.issuperset(s3)
True

五.字典:
a.声明 dict={}

b.声明赋值字典
>>> dict = {'Alice':'2341','Beth':'9102','Cecil':'3258'}
>>> 

c.获取字典元素
>>> print dict['Alice']
2341

d.修改字典元素
>>> dict['Alice'] = '4568'
>>> print dict['Alice']
4568
>>> 
>>> dict
{'Beth': '9102', 'Alice': '4568', 'Cecil': '3258'}

e: 删除字典元素
>>> del dict['Alice']
>>> dict
{'Beth': '9102', 'Cecil': '3258'}
>>> 
>>> dict
{'Beth': '9102', 'Cecil': '3258'}


f:清空字典元素
>>> dict.clear()
>>> 
>>> dict
{}
g: 删除字典
>>> del dict
>>> dict
<type 'dict'>
>>> 

h: 删除后无法获得
>>> del dict
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'dict' is not defined
>>> print dict
<type 'dict'>


i:迭代元素---字典同java,scala中map集合相似,key,value(java通过keyset进行获取),通过key获取value
>>> dict = {'Alice':'2341','Beth':'9102','Cecil':'jerry'}

(1) 迭代获取字典key
>>> for key in dict.keys():
...     print 'key',':',key,'-','value',':',dict[key]
... 
key : Beth - value : 9102
key : Alice - value : 2341
key : Cecil - value : jerry


(2) 获取字典value
>>> for value in dict.values():
...     print 'value',':',value
... 
value : 9102
value : 2341
value : jerry


(3)获取字典的key,value ,其实字典是复杂数据结构,内部的key,value是元组
>>> for kv in dict.items():
...    print '(key,value)',':',kv
... 
(key,value) : ('Beth', '9102')
(key,value) : ('Alice', '2341')
(key,value) : ('Cecil', 'jerry')


(4)获取字典的key,value,可以把元组分开来--->tup(key,value) 然后分开获取key,value
>>> for key,value in dict.items():
...     print 'key',':',key,'--','value',':',value
... 
key : Beth -- value : 9102
key : Alice -- value : 2341
key : Cecil -- value : jerry
>>> 

(4)python 单引号,双引号

单引号:当打印输出,获取集合元素,或其他只有''的时候,无"",可以使用'' : 
获取元素--dict['Alice']
>>> print dict['Alice']
2341

打印输出:
>>> print 'abd','dcde'
abd dcde

(5)双引号:当打印输出,或其他有""的时候,必须使用"", 外部"" ,内部用''   "",也可以直接使用""

需要使用''进行输出
>>> dict = {'Alice':'2341','Beth':'9102','Cecil':'jerry'}

>>> print "dict['Alice']",dict['Alice']
dict['Alice'] 2341

直接使用""

>>> print "agd","dfbb"
agd dfbb


(6)比较方法cmp(dict1,dict2) : 比较两字典的内容是否相同,相等为0,不等为1

>>> dict1 = {'Alice':'2341','Beth':'9102','Cecil':'jerry'}
>>> 
>>> dict2 = {'North':'256','Jerry':'sharon'}
>>> 
>>> cmp(dict1,dict2)
1
>>> 
>>> dict3 = {'Alice':'2341','Beth':'9102','Cecil':'jerry'}
>>> 
>>> cmp(dict1,dict3)
0

(7)长度,转换为str,list
长度:
>>> len(dict1)
3
>>> 
>>> strRes = str(dict1)


转换为str: 字符串完全转换
>>> dict1
{'Beth': '9102', 'Alice': '2341', 'Cecil': 'jerry'}

>>> strRes = str(dict1)


>>> print 'type(strRes)',type(strRes),'--','length',':',len(strRes),'value',':',strRes
type(strRes) <type 'str'> -- length : 51 value : {'Beth': '9102', 'Alice': '2341', 'Cecil': 'jerry'}


转换为list: 转换为list,得到key的集合
>>> dict1
{'Beth': '9102', 'Alice': '2341', 'Cecil': 'jerry'}

>>> list1=list(dict1)
  
>>> print 'type(list1)',':',type(list1),'length',':',len(list1),'value',':',list1
type(list1) : <type 'list'> length : 3 value : ['Beth', 'Alice', 'Cecil']
 

(8)字典复制生成新的字典变量,获取字典元素(可以设置在无对应key时,设置默认值)

>>> dict1 = {'Alice':'2341','Beth':'9102','Cecil':'jerry'}


字典复制生成新的字典变量
>>> dict1Copy = dict1.copy()
>>> print dict1Copy
{'Beth': '9102', 'Alice': '2341', 'Cecil': 'jerry'}
>>> 

获取字典元素(可以设置在无对应key时,设置默认值)
>>> dict1Copy.get('Jerry','sharon')
'sharon'
>>> 
>>> dict1Copy.get('Jerry','')
''
>>> dict1Copy.get('Jerry')

设置字典元素对应的key(可以设置在无对应key时,设置默认值)

>>> dict1Copy.setdefault('Jerry','如果没该key,此行为默认值')
'\xe5\xa6\x82\xe6\x9e\x9c\xe6\xb2\xa1\xe8\xaf\xa5key,\xe6\xad\xa4\xe8\xa1\x8c\xe4\xb8\xba\xe9\xbb\x98\xe8\xae\xa4\xe5\x80\xbc'
>>> 
>>> print dict1Copy.get('Jerry')
如果没该key,此行为默认值


判断key是否存在于字典中
>>> dict1Copy.has_key('Jerry')
False

 
获取字典的所有集合( 每对key,value是元组 (key,value))
>>> dict1Copy.items()
[('Beth', '9102'), ('Alice', '2341'), ('Cecil', 'jerry')]


获取字典的keys
>>> dict1Copy.keys()
['Beth', 'Alice', 'Cecil']

获取字典的values
>>> dict1Copy.values()
['9102', '2341', 'jerry']
>>> 
>>> 


>>> dict1Copy
{'Jerry': '\xe5\xa6\x82\xe6\x9e\x9c\xe6\xb2\xa1\xe8\xaf\xa5key,\xe6\xad\xa4\xe8\xa1\x8c\xe4\xb8\xba\xe9\xbb\x98\xe8\xae\xa4\xe5\x80\xbc', 'Beth': '9102', 'Alice': '2341', 'Cecil': 'jerry'}
 
 
获取字典的keys
>>> dict1Copy.keys()
['Jerry', 'Beth', 'Alice', 'Cecil']
>>> dict1Copy.values()
['\xe5\xa6\x82\xe6\x9e\x9c\xe6\xb2\xa1\xe8\xaf\xa5key,\xe6\xad\xa4\xe8\xa1\x8c\xe4\xb8\xba\xe9\xbb\x98\xe8\xae\xa4\xe5\x80\xbc', '9102', '2341', 'jerry']
>>> dict1Copy.items()
[('Jerry', '\xe5\xa6\x82\xe6\x9e\x9c\xe6\xb2\xa1\xe8\xaf\xa5key,\xe6\xad\xa4\xe8\xa1\x8c\xe4\xb8\xba\xe9\xbb\x98\xe8\xae\xa4\xe5\x80\xbc'), ('Beth', '9102'), ('Alice', '2341'), ('Cecil', 'jerry')]


删除字典某个元素,删除后返回该key对应的value,否则无该key,返回默认值
>>> dict1Copy.pop('Jerry','default')
'\xe5\xa6\x82\xe6\x9e\x9c\xe6\xb2\xa1\xe8\xaf\xa5key,\xe6\xad\xa4\xe8\xa1\x8c\xe4\xb8\xba\xe9\xbb\x98\xe8\xae\xa4\xe5\x80\xbc'
>>> 
>>> dict1Copy.pop('Jerry','default')
'default'
>>> 
>>> dict1Copy.pop('Jerry','如果该key,不存在,则返回默认值')
'\xe5\xa6\x82\xe6\x9e\x9c\xe8\xaf\xa5key,\xe4\xb8\x8d\xe5\xad\x98\xe5\x9c\xa8,\xe5\x88\x99\xe8\xbf\x94\xe5\x9b\x9e\xe9\xbb\x98\xe8\xae\xa4\xe5\x80\xbc

(9)字典元素操作
>>> dict4 = {'a':[1,2],'b':[3,4,5],'c':[6,7,8,9,10]}
>>> 
>>> print dict4['a'][0:2]
[1, 2]
>>> 
>>> print dict4['c'][0:len(dict4['c'])]
[6, 7, 8, 9, 10]
>>> 
 

猜你喜欢

转载自blog.csdn.net/dymkkj/article/details/81278473