Python基础学习之列表操作 1. 列表的增,删,改,查 1.1 列表的增加,常用的方法有:append, extent, incert append() 在列表的最后面增加元素; heros = ['马里奥', '路易斯', '林克']# 列表的增加
Python基础学习之列表操作
1. 列表的增,删,改,查
1.1 列表的增加,常用的方法有:append, extent, incert
1.2 列表的删除,常用的方法有:pop, clear , remove
1.3 列表的修改,直接对制定元素赋值即可;
- 对制定元素进行赋值,即可修改列表;
1.4 列表的查询,常用方法有 index, count, in
2. 列表的排序 (sort, sorted, reverse)
这里需要说明一下 sort & sorted 的区别: sort 是对原列表进行排列,即原列表会改变; sorted 是返回一个排列后的列表作为返回值,即原列表不会改变,会返回一个排序后的新列表;
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] heros.sort() print(heros) # 输出:['后羿', '库里', '库里', '路易吉', '马里奥'] heros.sort(reverse=True) # 返序排列 print(heros) # 输出:['马里奥', '路易吉', '库里', '库里', '后羿'] a = sorted(heros) # 不会影响原列表,会返回一个排序后的新列表; print(a) # 输出:['后羿', '库里', '库里', '路易吉', '马里奥'] print(heros) # 输出:['马里奥', '路易吉', '库里', '库里', '后羿'] heros.reverse() # 翻转列表,与 heros.sort(reverse=True) 一样3. 列表的循环 (for ... in ... & for ... in enumerate(...) )
3.1 for ... in ...
可以用这种方法,循环列表中的所有元素;
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] for hero in heros: print(hero) # 输出:后羿 库里 路易吉 库里 马里奥3.2 for ... in enumerate(...)
使用这种方法循环,可以同时获得元素的index(位置信息),举例如下:
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] for id,hero in enumerate(heros): print(id ,'--',hero) # 输出如下: # 0 -- 后羿 # 1 -- 库里 # 2 -- 路易吉 # 3 -- 库里 # 4 -- 马里奥4. 列表的复制
4.1 不是复制的复制
首先看以下代码:
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] copyheros = heros print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥'] heros[1] = '宙斯大魔王' print(heros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥'] print(copyheros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥']我们会有一个问题:为什么copyheros 的值会变?!?! 这似乎与我们的想法不一样。原因如下: 这里:copyheros = heros ,其实并没有复制,只是将 copyheros 指向了 heros,两个变量其实是共享一个内存地址的,所以当其中任何一个方法变化,另一个也会发生变化;图解如下: 所以,这里并没有任何的复制发生!
4.2 浅复制
如果以上的方法无法复制,那么我们需要怎样才能复制列表呢? 答案是:我们需要使用copy() 方法;
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] copyheros = heros.copy() print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥'] heros[1] = '宙斯大魔王' print(heros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥']从上面的例子,我们可以看到,更改heros 的元素后, copyheros 未发生变化;这里的copyheros 就是浅复制; 为什么这样的复制还叫浅复制呢?请继续看~
4.3 深复制
前面讲了浅复制,所谓浅复制,通俗的说:就是只能复制列表中的第一层; 总所周知,列表是可以嵌套的,例如: ['后羿', '库里', '路易吉', [ '猎人', '法师', '牧师' ] , '马里奥'],这里的列表中,出现了另一个列表[ '猎人', '法师', '牧师'], 当出现这种情况时,浅复制无法复制列表中的列表,参考下面的例一;因为:列表中的列表依然只共享一个内存空间; 想要一个完整的复制,需要使用copy模块中的 deepcopy(), 举例如例二:
例一: 浅复制的例子:
heros = ['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] copyheros = heros.copy() print(copyheros) # 输出:['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] heros[3][1] = '变身!!!' print(heros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥']例二:深复制的例子:
import copy heros = ['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] copyheros = copy.deepcopy(heros) print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '法师', '牧师'], '马里奥'] heros[3][1] = '变身!!!' print(heros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '法师', '牧师'], '马里奥']这里我们可以得到以下结论:
- 使用 = ,没有建立复制;
- 浅复制只是建立了一层的复制体;
- 深复制就是建立了一个完全独立的复制体;