作者: Sam (甄峰)
sam_code@hotmail.com
0. 基础知识:
Python中,所有东西都是个对象。对一块连续内存区域,Python提供了各种不同的对象来对应。
比如: List tuple, dict, set等。 但他们与C++中的数组又有很大的区别。
C++的数组,单纯就是一块内存区域。
List等序列容器,它维护的是一块逻辑上连续的区域,但同时又提供了属性和方法。可以方便用户对这块区域进行操作。
除了内置的类型,还有一些Python Package提供了拥有更多功能的类型,例如添加加锁功能等。
序列,每个元素都分配一个数字,标明元素的位置或者说索引。 第一个是0, 第二个是1,以此类推。
序列可以进行:索引,切片,加,乘,检查成员,获取序列长度,获取序列最大最小值。
1. List相关:
Python中有6个序列的内置类型。最常见的就是List(列表)和tuple(元组),
元组可以看成不可修改的List。
1.1:List特点:
- 是Python基本数据类型。
- List中每个元素分配一个数字,标明元素的位置或者index.
- List的数据项(元素)不需要具有相同的类型。
1.2:List使用:
1.2.1: List创建:
创建一个List,只需要把用逗号分隔的不同的数据项(不要求同类型)使用方括号括起来即可。
list1 = [1, "Just do it", 12.4, [1,2,3] ]
list2 = [1,2,3,4]
print(list1)
print(list2)
结果:
[1, 'Just do it', 12.4, [1, 2, 3]]
[1, 2, 3, 4]
1.2.2: List添加元素:
list.append(obj): 在List末尾添加新的元素。
list.extend(seq) : 在List末尾一次性最佳另一个序列中的多个值(用心列表扩展原来的列表)
list.insert(index, obj): 将一个对象加入到List中指定位置。
当list.insert(index, obj)中的index超过实际长度时,加到最后一位
例:
list1 = [1, "Just do it", 12.4, [1,2,3] ]
list2 = [1,2,3,4]
print("This is old list1", list1)
#print(list2)
list1.append(81)
list1.extend([43, "Kernel"])
list1.insert(1, 12)
print("This is new list1:", list1)
结果:
This is old list1 [1, 'Just do it', 12.4, [1, 2, 3]]
This is new list1: [1, 12, 'Just do it', 12.4, [1, 2, 3], 81, 43, 'Kernel']
1.2.3:删除元素:
del list[index]
删除List中某index项目
list.remove(obj) 删除指定值obj的第一个匹配项
这两个方法,都有可能出异常:
del list[index],当index out of range时,会报异常。
list.remove(obj) 当list中不存在obj这个元素时,会报异常。
例子:
#Create List
list1 = [1, "Just do it", 12.4, [1,2,3] ]
list2 = [1,2,3,4]
print("This is old list1", list1)
#print(list2)
#add
list1.append(81)
list1.extend([43, "Kernel"])
list1.insert(121, "error")
list1.insert(21, 12)
print("This is new list1:", list1)
print("Length is:", len(list1))
#del
list1.remove('Just do it')
del list1[0]
print("After remove. list1 is:", list1)
print("Length is:", len(list1))
结果:
This is old list1 [1, 'Just do it', 12.4, [1, 2, 3]]
This is new list1: [1, 'Just do it', 12.4, [1, 2, 3], 81, 43, 'Kernel', 'error', 12]
Length is: 9
After remove. list1 is: [12.4, [1, 2, 3], 81, 43, 'Kernel', 'error', 12]
Length is: 7
可以看到,index0和指定的"Just do it" 被删除了。
1.2.4:根据index访问:
index = 4
print("index %d" % index + " obj is:", list1[index])
Python支持反向索引:
print("Last object is:", list1[-1])
例:
#Create List
list1 = [1, "Just do it", 12.4, [1,2,3] ]
list2 = [1,2,3,4]
print("This is old list1", list1)
#print(list2)
#add
list1.append(81)
list1.extend([43, "Kernel"])
list1.insert(121, "error")
list1.insert(21, 12)
print("This is new list1:", list1)
print("Length is:", len(list1))
#del
list1.remove('Just do it')
del list1[0]
print("After remove. list1 is:", list1)
print("Length is:", len(list1))
#index
index = 4
print("index %d" % index + " obj is:", list1[index])
print("Last object is:", list1[-1])
list1[-2] = 'sucess'
print(list1)
结果:
This is old list1 [1, 'Just do it', 12.4, [1, 2, 3]]
This is new list1: [1, 'Just do it', 12.4, [1, 2, 3], 81, 43, 'Kernel', 'error', 12]
Length is: 9
After remove. list1 is: [12.4, [1, 2, 3], 81, 43, 'Kernel', 'error', 12]
Length is: 7
index 4 obj is: Kernel
Last object is: 12
[12.4, [1, 2, 3], 81, 43, 'Kernel', 'sucess', 12]
可以看到,index = -2的error修改为success.
1.2.5: List 容量:
len(list):
if not list2:
print("list1 have %d object" % len(list1))
list3 = []
if not list1:
print("list empty")
if not list3:
print("list3 empty")
显示:
list1 have 7 object
list3 empty
1.2.6:遍历:
for i in list1:
print(i)
1.2.7: 切片:
切片是List取值的一种方法。取值是顾头不顾尾。返回结果类型和切片对象类型一致。
使用方法为:
list[start:end:step]
start不指定时,缺省为0
end不指定时,缺省为最后一个。
例:
list1 = [12.4, [1, 2, 3], 81, 43, 'Kernel', 'sucess', 12]
list4 = list1[1::2] 步长为2,从1开始,到最后
print(list4)
list5 = list1[0:3] 从1开始,到3为止,不包括3
print(list5)
结果:
[[1, 2, 3], 43, 'sucess']
[12.4, [1, 2, 3], 81]
1.2.8:最小值,最大值:
max(list)
min(list)
1.2.9: obj获取index, obj出现次数:
list.index(obj)
list.count(obj)
2. 多维List:
Python本身没有多维List的概念。所谓多维,其实就是List的元素也是List。这样嵌套而成。
在TensorFlow和numpy中用到的很多。
list_m = [[1,2,3],[4,5,6],[7,8,9]]
print(list_m[2][1]) #第二行,第1列。 应该输出8
Python列表脚本操作符
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:
Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
3 in [1, 2, 3] True 元素是否存在于列表中