列表是python最为基础的数据结构,极为重要。
这话怎么理解呢?
综上需要非常熟悉列表的几乎所有操作。
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
python的list 是非常基础的,相当于cpp的vector的扩展。
显然按秩寻访是最为基本的,然后不一样的在于还有类似链表,栈和队列相似的操作。
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
这里需要注意几点
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
# 自然数索引,从前往后,第一个是0
print("list1[0]: ", list1[0])
print("list2[1:5]: ", list2[1:5])
# 支持负数索引,从后往前,最后一个是-1
list[-1]
打印列表的时候回自动添加换行,大部分时候还是比较人性化的。
如果想要去除,查看print的参数。好像是sep。。。
# 直接打印列表
fruits = ['grape', 'apple', 'banana', 'orange', 'pear'] # 打印的结果就是这一行
print('Before modify:\nfruits = '+str(fruits))
我觉得用处不大
list = ['Google', 'Runoob', 1997, 2000]
print ("第三个元素为 : ", list[2])
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2])
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1)
新增有好几种,如下:
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = ['Google', 'Runoob', 1997, 2000]
# append在末尾插入一个元素
list1.append(obj)
# 在指定位置之后插入元素,比如2就是在位置为2元素后面插入到3的位置(从零开始)。
fruits.insert(2, 'watermelon')
# extend,把list2的内容结合在list1的末尾,最终形成一个列表
list1.extend(list2)
# 和上面等效
list3 = list1+list2
list1 = ['Google', 'Runoob', 1997, 2000]
print("原始列表 : ", list1)
del list[2]
print("删除第三个元素 : ", list1)
# pop,删除最后一个并返回
last = list1.pop()
# remove,注意元素一定要存在,而且只会删除第一个匹配到的
list1.remove('Google')
# 清空,会变成[]
list1.clear()
我想说的是,删除会根据位置删除对应的内容。长度也会改变。
所以很多时候我们更倾向于给一个空的值或者没有意义的值(null,-1,0),这样长度不会减少
对应位置上的意义也就存在!!!,可以大大降低bug。
另外,千万小心使用remove。如果想去除,我的建议是反过来思考,遍历所有元素,将需要的元素拷贝到新的列表里面。宁可烦一点,也不要整体出现位置bug,具体原因可以百度这么函数。
坑死人不偿命!!!
除非情形比较简单直接删除才是推荐的。
m = [1,2,3,4,5,6,7]
# 统计该元素的个数
print(m.count(1))
# index,返回的是第一个匹配到的元素的的位置
print(m.index(1))
# 后面的参数划定了搜寻范围
print(m.index(3,2,5))
# sort,默认由大到小
print(m.sort())
print(m.sort(reverse=True))# 由小到大
# max
print(max(m))
# min
print(min(m))
#len
print(len(m))
# 列表的比较,可以自行深入研究
# 导入 operator 模块
import operator
a = [1, 2]
b = [2, 3]
c = [2, 3]
print("operator.eq(a,b): ", operator.eq(a,b)) # False
print("operator.eq(c,b): ", operator.eq(c,b)) # True
# 深拷贝
list1 = [1,2,3,4,5]
list2 = list1[:]
#或者
import copy # 需要特定的包
list3 = list1.deepcopy()
# 浅拷贝
list4 = list1
list5 = list1.copy() # 自带的方法是浅拷贝
深拷贝浅拷贝的知识不太适合用python语言来比划。
我的建议是都深拷贝,反正python总是比较耗内存。。。多点少点无所谓啦。。。当然肯定也是优化的一个点啦
如果需要深入理解这个可以参考。
参考
讲的很不错了,但我觉得还不是很直观。
我以后专门写一篇来讲解一下。
a = [i for i in range(10)]
b = [1 for i in range(10)]
c = [1]*10
d = []*10 # 不会自动添加null
e = [[]]*10
print(a,b,c,d,e)
结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[]
[[], [], [], [], [], [], [], [], [], []]
# 遍历
a = [1 for i in range(10)]
for i in a:
print(i)
list是有for in的迭代器方法的。
基础的知道这些就够了,但是为了面对更复杂的情况。
我们还需要知道更多。过几天我补上一些高级的列表操作的部分。
下次再见,嘿嘿