今天与各位分享python的另外两种数据类型:列表(Lists)和元组(Tuples)。
列表是一组对象的有序集合。
区别:
注1:从语法上准确的讲,Python的列表里保存的是指向各个成员数据对象指针的数组,并不是链表的形式。因此,根据索引从列表里取一个成员的速度与C语言的数组一样快。
例如:
L = [123, 'abc', 1.23, ['dev', 'mgr']]
这个列表有四个成员,分别是整数、字符串、小数、子列表。列表L里面保存的是指向这四个数据的指针(地址),并不是四个数据本身。
用中括号[]把一组数据括起来,并且这些数据之间用逗号隔开。例如:
L = ['module_a', 'module_b', 'module_c']
L = ['wire1', 'reg2', 'logic3']
L = [] #定义一个空列表
用len()
计算列表的长度,例如:
L = [1, 2, 3]
len(L) # = 3
列表作为一种序列,与字符串一样,支持序列的基本操作,如+(拼接)、*(重复)、index索引、slice切片。例如:
L1= [1, 2, 3]
L2= [4, 5, 6]
L3 = L1 + L2 #L3 = [1, 2, 3, 4, 5, 6]
L4 = L1* 2 #L4 = [1, 2, 3, 1, 2, 3]
L1[0] # = 1
L1[0:2] # = [1, 2],与字符串切片一样,是前开后闭型的[a, b)
列表支持原位修改。与字符串是只读的不一样,列表是可变的。例如:
L1= [1, 2, 3]
L1[0] = 4 #L1 = [4, 2, 3]
L1[0:2] = [5, 6] #L1 = [5, 6, 3]
L1[:0] = [1, 2, 3] #L1 = [1, 2, 3, 5, 6, 3],在开头插入
L1[len(L1):] = [7, 8, 9] #L1 = [1, 2, 3, 5, 6, 3, 7, 8, 9],在末尾插入
列表作为对象本身的操作方法有append、extend、insert、remove、pop、sort、reverse、count、index、clear。例如:
L1 = [1, 2, 3]
L1.append(4) #L1 = [1, 2, 3, 4]
L1.remove(4) #L1 = [1, 2, 3]
L1.extend([4, 5, 6]) #L1 = [1, 2, 3, 4, 5, 6]
L1.pop(0) #L1 = [2, 3, 4, 5, 6]
L1.pop() #L1 = [2, 3, 4, 5]
L1.insert(0, 1) #L1 = [1, 2, 3, 4, 5]
L1.reverse() #L1 = [5, 4, 3, 2, 1]
L1.sort() #L1 = [1, 2, 3, 4, 5]
L1.count(2) #= 1
L1.index(3) #= 2
L1.clear() #L1 = []
注:列表没有push函数,不要想当然哦。不信?你可以用print(dir(L1))查查列表有哪些内置函数。
下面介绍一个特别的数据类型——元组(Tuple)。元组可以理解成只读的列表。不能进行上面几乎所有操作,除了index和count。只读属性有点像字符串。正因为定义后不能修改,元组是定长的。
元组的定义用圆括号()而不是方括号[]。例如:
T1 = ('192.168.0.1', 9002)
T2 = ('eco_module_a', 'eco_module_b', 'eco_module_c')
如这些例子,元组可用于防止误修改的情况,比如作为函数的输入参数,并不希望被函数内部误修改到。
例如:我们需要读取tc目录下的test case列表,并转化成元组。
#!/usr/bin/env python
import os
tc = os.listdir('tc')
print(type(tc))
tc_ro = tuple(tc)
print(type(tc_ro))
print(tc_ro)
运行结果如下:
[chenf@localhost python]$ ls tc
tc_func_a.svh tc_func_b.svh tc_func_c.svh
[chenf@localhost python]$ ./test.py
<type 'list'>
['tc_func_c.svh', 'tc_func_a.svh', 'tc_func_b.svh']
<type 'tuple'>
('tc_func_c.svh', 'tc_func_a.svh', 'tc_func_b.svh')
下次我们将介绍python的另一个重要的数据类型“字典”。在TCL语言里也有字典,在C和Perl里叫哈希,在SystemVerilog里叫关联数组,我们会介绍他们有哪些异同点。