Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

python中的序列容器List

$
0
0
作者: 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       元素是否存在于列表中



 

Viewing all articles
Browse latest Browse all 158

Trending Articles