Python对象
- 1. 列表(list)
- 2. 元组(tuple)
- 3. 字典(dict)
- 4. 集合(set)
- 5. 字符串(string)
- 6. BIF (Built-in Function)
- 7. 列表、集合以及字典的推导式
Python对象是一种强类型引用,所有对象都有一个特定类型(或类)。
- 可用
type(a)
查看对象a的类型 - 用
isinstance(a,int)
查看对象a是否指定类型。
大部分Python对象是可变的(mutable),如列表(list)、字典(dict)、Numpy数组以及大部分用户自定义类型;字符串(string)和元组(tuple) 是不可变的。
1. 列表(list)
(1) 列表的定义
列表是一个数据集合,动态的,可以随需要伸缩,数据使用的所有内存都由python管理。通过方括号([])
或list()
函数定义。
e.g.
a_list=[2,3,7,None]
tup=('foo','bar','baz')
b_list=list(tup)
(2)列表的切片
访问列表的多个数据可以使用切片,如a_list[0:3]
使用-1,可以实现列表(或元组的反序),如a_list[::-1]
。
e.g.
a_list = ['a','b','c','h','e']
a_list[:2]
输出:
[‘a’, ‘b’]
a_list[0:5:2] #[start:end:step]
输出:
[‘a’, ‘c’, ‘e’]
a_list[::-1]
输出:
[‘e’, ‘h’, ‘c’, ‘b’, ‘a’]
(3)列表的方法
append()
将元素添加到列表末尾insert()
将元素插入到列表指定位置pop()
移除并返回指定索引处的元素remove()
按值删除元素sort()
排序count()
列表中对象的计数
a_list = ['a','b','c','h','e']
a_list.append('a')
a_list
输出:
[‘a’, ‘b’, ‘c’, ‘h’, ‘e’, ‘a’]
a_list.count('a')
输出:
2
a_list.sort()
a_list
输出:
[‘a’, ‘a’, ‘b’, ‘c’, ‘e’, ‘h’]
2. 元组(tuple)
元组是一种一维的、定长的、不可变的Python对象序列。
最简单的创建方式是一组以逗号隔开的值。
对元组型变量表达式进行赋值,Python就会尝试将等号右侧的值进行拆包(unpacking)。
e.g.
my_tuple = (1,3,'a','hello')
3. 字典(dict)
(1) 字典的定义
字典是一种大小可变的键值对集,字典的值可以是任何Python对象,但键必须是不可变对象。
创建字典可使用{}
或dict()
工厂函数:new_d={}
或 new_d=dict()
然后增加数据d['name']='Eric Idle'
也可 new_d={'name':'Eric Idle'}
将两个序列中的元素两两配对地组成一个字典: maping=dict(zip(range(5),reversed(range(5))))
e.g.
# dict([k1,v1],[k2,v2]...)
valList = ['a','b','c','d','e']
mapping=dict(zip(range(5),valList))
print(mapping)
输出:
{0: ‘a’, 1: ‘b’, 2: ‘c’, 3: ‘d’, 4: ‘e’}
(2)字典的方法
keys()
和values()
分别用于获取键和值,分别返回字典中键和值的列表d1.update(d2)
添加d2中所有项目到d1list(d)
字典的键的列表sorted(d)
字典的键的列表,排序key in d
测试特定的键是否在字典中for key in d
遍历字典的键dict([k1,v1],[k2,v2],...)
从一个键-值对列表创建一个字典
e.g.
for key in mapping:
print(mapping[key])
输出:
a
b
c
d
e
4. 集合(set)
集合是由唯一元素组成的无序集,可以看做只有键没有值的字典。
创建集合可使用{}
或set()
工厂函数。
e.g.
a_list = ['a','b','c','h','e','a','e']
a_set = set(a_list)
b_set = {'a','b','c','h','e','a','e'}
集合支持交(&)、并(|)、差(-)、异或(^)的操作。
5. 字符串(string)
Python字符串是不可变的,可以使用单引号(‘)或双引号("),对于带有换行符的多行字符串,可以使用三重引号(’''或"“”)。
反斜杠(\)是转义字符(escape character),可用于指定特殊字符(如\n或unicode字符)。在字符串最左边引号前加上r,表示所有字符按照原样进行转义。
string对象的主要方法:split()
将一个字符串分解为一个子串列表find()
在一个字符串中查找一个特定字串strip()
从字符串去除不需要的空白符
字符串是一串字符序列,可以被当做某种序列类型(如列表、元组等)进行处理。
可以把一个字符串赋值给一个变量,索引一个字符串,切片一个字符串。
e.g.
name = 'Monty'
name[0]
输出:
‘M’
name[:4]
输出:
‘Mont’
name = '.'.join(['Monty','Python'])
name
输出:
‘Monty.Python’
name.split('.')
输出:
[‘Monty’, ‘Python’]
name.find('Python')
输出:
6
name.find('on')
输出:
1
name.find('Monpy')
输出:
-1
6. BIF (Built-in Function)
str()
用来访问任何数据对象(支持串转换)的串表示。isinstance()
检查一个标识符是否指示某个指定类型的数据对象。range()
与for结合使用,迭代固定次数。sorted()
将任何序列返回一个新的有序列表,传入reverse=True可以按降序排列数据。sorted()
和set()
结合可以得到一个由序列中的唯一元素组成的有序列表。
enumerate()
可以逐个返回序列的(i,value)元组。for item in s
遍历s中的元素for item in sorted(s)
按顺序遍历s中的元素for item in reversed(s)
按逆序遍历s中的元素for item in set(s)
遍历s中无重复的元素for item in set(s).difference(t)
遍历在集合s中不在t的元素for item in random.shuffle(s)
随机遍历s中的元素
zip()
用于将多个序列(列表、元组)中的元素配对,从而产生一个新的元组列表。zip()
可以接受任意数量的序列,最终得到的元组数量由最短的序列决定。
e.g.
seq1 = ['foo','bar','baz']
seq2 = ['one','two','three']
zip(seq1,seq2)
for i,(a,b) in enumerate(zip(seq1,seq2)):
print('%d:%s,%s' %(i,a,b))
输出:
0:foo,one
1:bar,two
2:baz,three
对于“已压缩的”(zipped)序列,zip()
可对该序列进行“解压”(unzip)。
e.g.
pitchers = [('Nolan','Ryan'),('Roger','Clemens'),('Schilling','Curt')]
first_names,last_names = zip(*pitchers)
print(first_names, last_names)
输出:
(‘Nolan’, ‘Roger’, ‘Schilling’) (‘Ryan’, ‘Clemens’, ‘Curt’)
7. 列表、集合以及字典的推导式
new_l = []
for t in old_l:
new_l.append(len(t))
列表推导(函数编程):new_l = [len(t) for t in old_l]
e.g.
strings = ['a','as','bat','car','car','dove','python']
[s.upper() for s in strings if len(s)>2]
输出:
[‘BAT’, ‘CAR’, ‘CAR’, ‘DOVE’, ‘PYTHON’]
{s.upper() for s in strings if len(s)>2}
输出:
{‘BAT’, ‘CAR’, ‘DOVE’, ‘PYTHON’}
{index:val for index,val in enumerate(strings)}
输出:
{0: ‘a’, 1: ‘as’, 2: ‘bat’, 3: ‘car’, 4: ‘car’, 5: ‘dove’, 6: ‘python’}
dict((index,val) for index,val in enumerate(strings))
输出:
{0: ‘a’, 1: ‘as’, 2: ‘bat’, 3: ‘car’, 4: ‘car’, 5: ‘dove’, 6: ‘python’}