Python-元组列表

二者区别

  • 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable)。
  • 元组是静态的,长度大小固定,无法增加删减或者改变(immutable)。
  • list和tuple的内部实现都是array的形式,list因为可变,所以是一个over-allocate的array,tuple因为不可变,所以长度大小固定。数组存储的只是指针,指针所指的数据类型可能不一样,但指针的长度就是8个字节

定义

列表和元组都支持自定义的嵌套

l = [[1, 2, 3], [4, 5]] # 列表的每一个元素也是一个列表
tup = ((1, 2, 3), (4, 5, 6)) # 元组的每一个元素也是一个元组

id = [x for x in range(0, 100000)]
price = [x for x in range(200000, 300000)]
products = list(zip(id, price))

当然,两者也可以通过 list() 和 tuple() 函数相互转换:

list((1, 2, 3))
[1, 2, 3]

tuple([1, 2, 3])
(1, 2, 3)

想创建一个空的列表,我们可以用下面的 A、B 两种方式,请问它们在效率上有什么区别吗?

# 创建空列表
# option A
empty_list = list()

# option B
empty_list = []

区别主要在于list()是一个function call,Python的function call会创建stack,并且进行一系列参数检查的操作,比较expensive,反观[]是一个内置的C函数,可以直接被调用,因此效率高。

添加

append(元素值):在list末尾添加一个元素

insert(n, 元素值):在指定索引处添加元素

删除

pop(n):给定值n时就删除索引为n处的元素,没有的话就删除最后一个元素

del list[n]:直接删除给定的元素

list.remove(obj)
移除列表中某个值的第一个匹配项

修改

可以直接通过下标访问和修改单个元素

a[-1]表示列表的倒数第一个元素,也就是列表的最后一个元素

查询

也可以通过下标像上面那样进行元素访问

 

a[:],a[::]相当于a[0:n:1]:表示按照自动加1的方式访问索引从0到n-1的元素,元素个数为n,其实就是访问整个列表本身

这个有很多作用,例如

  • 仅得到列表的奇数项元素用a[::2]
  • 从第三个元素开始的奇数项元素a[2::2]
  • 得到偶数项元素为a[1::2]
  • 列表的倒序为a[::-1],相当于a[-1::-1],指从列表的最后一个元素倒序访问

[:]和=的区别

  • 这两者都可以实现赋值,但是=是引用赋值,得到的列表指向的还是原来的内容,修改一个列表,另一个也会发生变化
  • [:]是值赋值,修改新的或原来的列表,对另外一个列表没有影响

查询的操作同时适用于列表和元组

 

其他

 

l = [3, 2, 3, 7, 8, 1]
l.count(3) 
2
l.index(7)
3
l.reverse()
l
[1, 8, 7, 3, 2, 3]
l.sort()
l
[1, 2, 3, 3, 7, 8]

tup = (3, 2, 3, 7, 8, 1)
tup.count(3)
2
tup.index(7)
3
list(reversed(tup))
[1, 8, 7, 3, 2, 3]
sorted(tup)
[1, 2, 3, 3, 7, 8]

 

  • count(item) 表示统计列表 / 元组中 item 出现的次数。
  • index(item) 表示返回列表 / 元组中 item 第一次出现的索引。
  • list.reverse() 和 list.sort() 分别表示原地倒转列表和排序(注意,元组没有内置的这两个函数)。
  • reversed() 和 sorted() 同样表示对列表 / 元组进行倒转和排序,reversed() 返回一个倒转后的迭代器(上文例子使用 list() 函数再将其转换为列表);sorted() 返回排好序的新列表。

 

posted on 2017-02-27 15:16  simple_孙  阅读(375)  评论(0编辑  收藏  举报

导航