python数据类型:序列(字符串,元组,列表,字典)

序列通常有2个特点:

1,可以根据索引取值

2,可以切片操作

字符串,元组,列表,字典,都可以看做是序列类型

我的操作环境:Ubuntu16.04+python2.7

一、字符串类型

>按索引获取,索引从0开始

1 >>> name='ghostwu'
2 >>> name[0]
3 'g'
4 >>> name[1]
5 'h'
6 >>> name[6]
7 'u'
8 >>> 

>切片操作,第1个冒号的值,表示从哪个索引开始切片。第2个冒号的值,表示从到哪个索引结束(注意:结果不包含这个位置)。第3个冒号的值,表示步长

>>> name='My Name Is Ghostwu'
>>> name[0:7]
'My Name'
>>> name[0:7:1]
'My Name'
>>> name[0:7:2]
'M ae'

默认切片操作为:从左到右。如果步长为负数,表示从右往左切片。从后往前数(索引从-1开始),  type的作用:查看数据类型。

 1 >>> name='My Name Is Ghostwu'
 2 >>> name[-1]
 3 'u'
 4 >>> name[-1:-4]
 5 ''
 6 >>> name[-1:-4:-1]
 7 'uwt'
 8 >>> type(name)
 9 <type 'str'>
10 >>> name[2]
11 ' '
12 >>> name[2:]
13 ' Name Is Ghostwu'
14 >>> name[2:-1]
15 ' Name Is Ghostw'
16 >>> 

字符串其他小技巧: 

>len函数,计算长度

>>> str="ghostwu"
>>> len(str)
7

>+号,连接字符串

>>> str="hi "
>>> str2="ghostwu"
>>> str+str2
'hi ghostwu'

 >*号,重复字符串次数,是不是很简洁,在php中要用str_repeat或者循环连接字符串

>>> str="ghostwu"
>>> str*2
'ghostwughostwu'
>>> str
'ghostwu'
>>> 

>in: 判断元素是否在序列中

>>> str="ghostwu"
>>> 'g' in str
True
>>> 'x' in str
False
>>> 

>max最大值,min最小值

>>> str="abc123"
>>> max(str)
'c'
>>> min(str)
'1'
>>> 

>cmp(str1,str2) 比较序列值是否相同

 1 >>> str="abc"
 2 >>> str2="ab1"
 3 >>> cmp(str,str2)
 4 1
 5 >>> cmp(str2,str)
 6 -1
 7 >>> str2="abc"
 8 >>> cmp(str,str2)
 9 0
10 >>> 

二、元组类型

用名称=(item,item,)小括号定义,只有一项的时候,要加逗号

字符串的痛点:如果用一个字符串,保存某个人的信息,那么在切片的时候(如人名,年龄,性别)就不太好操作

1 >>> userinfo="ghostwu 20 male"
2 >>> type(userinfo)
3 <type 'str'>
4 >>> userinfo[0:7]
5 'ghostwu'

如果用元组来处理

 1 >>> userinfo=("ghostwu","20","male")
 2 >>> type(userinfo)
 3 <type 'tuple'>
 4 >>> userinfo[0]
 5 'ghostwu'
 6 >>> userinfo[1]
 7 '20'
 8 >>> userinfo[2]
 9 'male'
10 >>> 

看,是不是非常简单?只有一项时?怎么定义?

>>> userinfo=("ghostwu")
>>> type(userinfo)
<type 'str'>
>>> 

像上面这种定义方式,定义的是一个字符串类型。只有一项时,需要在后面加个逗号','

>>> userinfo=('ghostwu',)
>>> type(userinfo)
<type 'tuple'>
>>> userinfo[0]
'ghostwu'
>>> 

元组定义之后,不可以被修改:

>>> userinfo=("ghostwu",20,"male")
>>> userinfo[0]="zhangsan"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> 

可以使用类似es6的解构语法,把元组的每一项对应赋值给左边的变量:

>>> userinfo=('ghostwu',20,'male')
>>> name,age,sex=userinfo
>>> name
'ghostwu'
>>> age
20
>>> sex
'male'

三、列表(list)

>中括号定义

>>> list1=[]
>>> type(list1)
<type 'list'>
>>> userinfo=['ghostwu',20,'male']
>>> type(userinfo)
<type 'list'>
>>> userinfo[0]
'ghostwu'
>>> userinfo[1]
20
>>> userinfo[2]
'male'

>列表的切片操作

 1 >>> userinfo=['ghostwu',20,'male']
 2 >>> userinfo[0:1]
 3 ['ghostwu']
 4 >>> userinfo[0:2]
 5 ['ghostwu', 20]
 6 >>> userinfo[::2]
 7 ['ghostwu', 'male']
 8 >>> userinfo[::]
 9 ['ghostwu', 20, 'male']
10 >>> userinfo[::1]
11 ['ghostwu', 20, 'male']

>列表可以被重新赋值,列表项可以被修改,但是不能动态索引方式增加,否则报错(索引超出上限)

 1 >>> userinfo=['ghostwu',20,'male']
 2 >>> len(userinfo)
 3 3
 4 >>> userinfo='zhangsan'
 5 >>> len(userinfo)
 6 8
 7 >>> userinfo=[]
 8 >>> len(userinfo)
 9 0
10 >>> userinfo[0]="ghostwu"
11 Traceback (most recent call last):
12   File "<stdin>", line 1, in <module>
13 IndexError: list assignment index out of range
14 >>> userinfo=["ghostwu",20,"male"]
15 >>> userinfo[0]="zhangsan"
16 >>> userinfo
17 ['zhangsan', 20, 'male']
18 >>> userinfo[3]="china"
19 Traceback (most recent call last):
20   File "<stdin>", line 1, in <module>
21 IndexError: list assignment index out of range
22 >>> 

>列表操作:

取值:切片和索引    修改: list[] = x

>>> userinfo=['ghostwu',20,'male']
>>> type(userinfo)
<type 'list'>
>>> userinfo[0]
... 
'ghostwu'
>>> userinfo[0:2]
['ghostwu', 20]

修改列表的某一项时候,地址没有改变,还是列表本身

>>> userinfo=["ghostwu",20,"male"]
>>> id(userinfo)
140648386293128
>>> userinfo[0]="hello"
>>> id(userinfo)
140648386293128

元组重新被赋值,相当于重新定义了一个新的元组:

>>> userinfo=("ghostwu",20)
>>> type(userinfo)
<type 'tuple'>
>>> userinfo[0]="hello"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> id(userinfo)
140648386125696
>>> userinfo=("zhangsan",30)
>>> id(userinfo)
140648386125552

添加: list.append()

1 >>> userinfo=["ghostwu",20]
2 >>> userinfo
3 ['ghostwu', 20]
4 >>> userinfo.append("male")
5 >>> userinfo
6 ['ghostwu', 20, 'male']
7 >>> userinfo.append("china")
8 >>> userinfo
9 ['ghostwu', 20, 'male', 'china']

 删除: del(list[])   list.remove(list[]) ,  注意:remove删除的是列表中第一次出现的值

 1 >>> userinfo
 2 ['ghostwu', 20, 'male', 'china']
 3 >>> type(userinfo)
 4 <type 'list'>
 5 >>> userinfo.remove(20)
 6 >>> userinfo
 7 ['ghostwu', 'male', 'china']
 8 >>> userinfo.remove("china")
 9 >>> userinfo
10 ['ghostwu', 'male']
>>> userinfo=['ghostwu',20,'ghostwu','male','ghostwu']
>>> userinfo
['ghostwu', 20, 'ghostwu', 'male', 'ghostwu']
>>> userinfo.remove('ghostwu')
>>> userinfo
[20, 'ghostwu', 'male', 'ghostwu']
 1 >>> userinfo
 2 [20, 'ghostwu', 'male', 'ghostwu']
 3 >>> type(userinfo)
 4 <type 'list'>
 5 >>> userinfo.remove('male')
 6 >>> userinfo
 7 [20, 'ghostwu', 'ghostwu']
 8 >>> del( userinfo[1] )
 9 >>> userinfo
10 [20, 'ghostwu']

查找: var in list

1 >>> userinfo
2 [20, 'ghostwu']
3 >>> 20 in userinfo
4 True
5 >>> '20' in userinfo
6 False
7 >>> 'ghostwu' in userinfo
8 True

四、字典

他的用法类似于javascript中的json,大括号中用键值对定义,取数据用对应的键

 1 >>> userinfo={'name':'ghostwu', 1 : 20, 'age' : 20, 'sex' : 'male' }
 2 >>> type(userinfo)
 3 <type 'dict'>
 4 >>> userinfo
 5 {1: 20, 'age': 20, 'name': 'ghostwu', 'sex': 'male'}
 6 >>> userinfo['name']
 7 'ghostwu'
 8 >>> userinfo['age']
 9 20
10 >>> userinfo[1]
11 20

字典中的键,可以是字符串,也可以是变量

1 >>> a=10
2 >>> b=20
3 >>> dic={a:'ghostwu','b':'male'}
4 >>> dic
5 {10: 'ghostwu', 'b': 'male'}
6 >>> dic[10]
7 'ghostwu'
8 >>> dic['a']

用类似javascript的for ... in语法 遍历字典:

 1 >>> userinfo={'name':'ghostwu','age':20,'sex':'male'}
 2 >>> for key in userinfo:
 3 ...     print key
 4 ... 
 5 age
 6 name
 7 sex
 8 >>> for key in userinfo:
 9 ...     print userinfo[key]
10 ... 
11 20
12 ghostwu
13 male
14 >>> 

为字典增加一项值

1 >>> userinfo
2 {'age': 20, 'name': 'ghostwu', 'sex': 'male'}
3 >>> type(userinfo)
4 <type 'dict'>
5 >>> userinfo['email']='test@admin.com'
6 >>> userinfo
7 {'email': 'test@admin.com', 'age': 20, 'name': 'ghostwu', 'sex': 'male'}

字典相关操作方法: del可以删除某一项,或者删除整个字典,dict.clear()是清空整个字典.  dict.pop( key ),删除字典中对应的key和值,并返回被删除的值

>>> userinfo
{'email': 'test@admin.com', 'age': 20, 'name': 'ghostwu', 'sex': 'male'}
>>> type(userinfo)
<type 'dict'>
>>> userinfo['age']=30
>>> userinfo
{'email': 'test@admin.com', 'age': 30, 'name': 'ghostwu', 'sex': 'male'}
>>> del(userinfo['age'])
>>> userinfo
{'email': 'test@admin.com', 'name': 'ghostwu', 'sex': 'male'}
>>> userinfo.pop('email')
'test@admin.com'
>>> userinfo
{'name': 'ghostwu', 'sex': 'male'}
>>> userinfo.clear()
>>> userinfo
{}
>>> del(userinfo)
>>> userinfo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'userinfo' is not defined
>>> 

 字典有很多的方法,比如:keys获取所有的键,values:获取所有的值

1 >>> userinfo={'name':'ghostwu','age':20,'sex':'male'}
2 >>> userinfo.keys()
3 ['age', 'name', 'sex']
4 >>> userinfo.values()
5 [20, 'ghostwu', 'male']
原文地址:https://www.cnblogs.com/ghostwu/p/8583159.html