python的数据类型(四):列表List和元组Tuple
专栏:ExASIC Oct. 26, 2024, 8:27 p.m. 48 阅读
列表(Lists)和元组(Tuples)

今天与各位分享python的另外两种数据类型:列表(Lists)和元组(Tuples)。

列表是什么?

列表是一组对象的有序集合。

与C语言的数组有什么区别呢?

区别:

  • C语言数组的成员类型相同,而Python列表的成员类型可以不同(注1)。

  • C语言数组的大小是固定的,而Python列表的大小可扩大、可缩小。

注1:从语法上准确的讲,Python的列表里保存的是指向各个成员数据对象指针的数组,并不是链表的形式。因此,根据索引从列表里取一个成员的速度与C语言的数组一样快。

py-08-01.webp

例如:

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)

下面介绍一个特别的数据类型——元组(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里叫关联数组,我们会介绍他们有哪些异同点。

感谢阅读,更多文章点击这里:【专栏:ExASIC】
最新20篇 开设专栏