列表(list)和元组(tuple)是 Python 中两种重要的数据结构。列表和元组之间有相似的地方也有不同的地方,了解两者的异同可以更好的使用它们,下面我们便对列表和元组做一个比较。
列表的创建使用方括号 []
。
my_list = [1, 2, 3, 4, 5, 6]
my_list
Out[4]: [1, 2, 3, 4, 5, 6]
type(my_list)
Out[5]: list
元组的创建使用圆括号 ()
。
my_tuple = (1, 2, 3, 4, 5, 6)
my_tuple
Out[5]: (1, 2, 3, 4, 5, 6)
type(my_tuple)
Out[6]: tuple
列表
my_list = [1, 2, 3, "Jan", "Feb", "Mar"]
my_list
Out[8]: [1, 2, 3, 'Jan', 'Feb', 'Mar']
type(my_list)
Out[9]: list
元组
my_tuple = (1, 2, 3, "Jan", "Feb", "Mar")
my_tuple
Out[11]: (1, 2, 3, 'Jan', 'Feb', 'Mar')
type(my_tuple)
Out[12]: tuple
列表
my_list = [1, 2, 3, "Jan", "Feb", "Mar"]
my_list[0]
Out[14]: 1
元组
my_tuple = (1, 2, 3, "Jan", "Feb", "Mar")
my_tuple[0]
Out[16]: 1
列表
my_list = [1, 2, 3, "Jan", "Feb", "Mar"]
my_list[-1]
Out[18]: 'Mar'
元组
my_tuple = (1, 2, 3, "Jan", "Feb", "Mar")
my_tuple[-1]
Out[20]: 'Mar'
列表
my_list = [1, 2, 3, "Jan", "Feb", "Mar"]
my_list[1:3]
Out[22]: [2, 3]
元组
my_tuple = (1, 2, 3, "Jan", "Feb", "Mar")
my_tuple[1:3]
Out[24]: (2, 3)
列表
my_list = [1, 2, 3, "Jan", "Feb", "Mar"]
for i in my_list:
print(i)
1
2
3
Jan
Feb
Mar
元组
my_tuple = (1, 2, 3, "Jan", "Feb", "Mar")
for i in my_tuple:
print(i)
1
2
3
Jan
Feb
Mar
列表
my_list = [1, 2, 3, "Jan", "Feb", "Mar"]
my_list[0] = 4
my_list
Out[33]: [4, 2, 3, 'Jan', 'Feb', 'Mar']
元组
my_tuple = (1, 2, 3, "Jan", "Feb", "Mar")
my_tuple[0] = 4
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-35-aa9eb6c6a7e5> in <module>()
----> 1 my_tuple[0] = 4
TypeError: 'tuple' object does not support item assignment
列表
my_list = [1, 2, 3, 4, 5, 6]
my_list.__sizeof__()
Out[37]: 88
元组
my_tuple = (1, 2, 3, 4, 5, 6)
my_tuple.__sizeof__()
Out[39]: 72
从例子中可以看出,在存储的元素相同时,列表需要的存储空间比元组要大,这是因为列表在存储元素的同时还要存储指向元素的指针。因此占用的存储空间要大。
列表和元组在初始化以及访问的性能是怎样的呢?我们通过例子来看下。
python -m timeit "x=[1,2,3,4,5,6,7,8]"
5000000 loops, best of 5: 73 nsec per loop
python -m timeit "x=(1,2,3,4,5,6,7,8)"
20000000 loops, best of 5: 16.6 nsec per loop
从初始化的耗时可以看出,列表的初始化速度是元组的 4 倍多。
python -m timeit -s "x=[1,2,3,4,5,6,7,8]" "y=x[3]"
10000000 loops, best of 5: 35.8 nsec per loop
python -m timeit -s "x=(1,2,3,4,5,6,7,8)" "y=x[3]"
10000000 loops, best of 5: 35.4 nsec per loop
从访问的耗时可以看出,列表和元组的速度差不多。
由于元组在创建之后不可改变,因此比较适合存储的数据和数量不变的场景。例如,可以用元组来存储一年的月份名称:
months_tuple = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
由于列表在创建之后允许改变,因此比较适合存储的数据和数量变化的场景。例如,可以用列表来存储商品的名称:
product_list = ["apple", "pear", "banana"]
append() - Add an element to the end of the list
extend() - Add all elements of a list to the another list
insert() - Insert an item at the defined index
remove() - Removes an item from the list
pop() - Removes and returns an element at the given index
clear() - Removes all items from the list
index() - Returns the index of the first matched item
count() - Returns the count of the number of items passed as an argument
sort() - Sort items in a list in ascending order
reverse() - Reverse the order of items in the list
copy() - Returns a shallow copy of the list
my_list = [1, 2, 3, 4, 5, 6]
my_list.append(7)
my_list
Out[33]: [1, 2, 3, 4, 5, 6, 7]
my_list.insert(2, 8)
my_list
Out[35]: [1, 2, 8, 3, 4, 5, 6, 7]
my_list.remove(8)
my_list
Out[37]: [1, 2, 3, 4, 5, 6, 7]
my_list.pop()
Out[38]: 7
my_list.pop(3)
Out[39]: 4
my_list
Out[40]: [1, 2, 3, 5, 6]
my_list.index(5)
Out[41]: 3
my_list2 = [1, 2, 3]
my_list.extend(my_list2)
my_list
Out[44]: [1, 2, 3, 5, 6, 1, 2, 3]
my_list.count(2)
Out[45]: 2
my_list.count(3)
Out[46]: 2
my_list.sort()
my_list
Out[48]: [1, 1, 2, 2, 3, 3, 5, 6]
my_list.reverse()
my_list
Out[50]: [6, 5, 3, 3, 2, 2, 1, 1]
index() - Returns the index of the first matched item
count() - Returns the count of the number of items passed as an argument
my_tuple = (1, 2, 3, 3, 4, 5)
my_tuple.count(3)
Out[52]: 2
my_tuple.index(5)
Out[53]: 5
本文主要介绍了列表和元组的不同之处,了解了不同之处,使得我们在使用的时候可以选择最合适的数据结构。
封面:该图片由Gerd Altmann在Pixabay上发布
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。