heros = ['马里奥', '路易斯', '林克'] # 列表的增长 append() heros.append('后羿') # 在列表最后追加值 print(heros) #输出:['马里奥', '路易斯', '林克', '后羿']
# 列表插入 heros.insert(3, '战神') print(heros) # 输出:['马里奥', '路易斯', '林克', '战神', '后羿']
# 列表合并 heros2 = ['屠夫', '虚空'] heros.extend(heros2) print(heros) # 输出:['马里奥', '路易斯', '林克', '战神', '后羿', '屠夫', '虚空']
heros= ['马里奥', '路易斯', '林克', '战神', '后羿', '屠夫', '虚空'] x = heros.pop() # 默认删除最后一个数据,并返回被删除的值 print(heros) # heros中删除了最后的元素,输出为:['马里奥', '路易斯', '林克', '战神', '后羿', '屠夫'] print(x) # pop 方法返回了被删除的值,这一点很重要,能够对变成带来便利;输出为:虚空 x = heros.pop(3) # pop() 也能够指定删除的位置,x输出为:战神
heros.clear() #清空heros中的全部元素; print(heros) # 输出:[] # del 也能够使用可是不推荐,若是没有写index, 会将变量都删掉,即再也不有hores这个列表;
heros.remove('路易斯') heros.remove('路易斯') #再次删除,数据不存在,则会报错 ValueError: list.remove(x): x not in list print(heros)
a=['a','b','c'] # 删除元素 不推荐使用这种方法! del a[1] #传入元素,则删除对应的元素; print(a) # 输出为:['a', 'c'] # 删除变量 del a print(a) # 变量a 已经被删除,因此这里会报错; error: name 'a' is not defined
# 列表的修改 heros = ['后羿', '屠夫', '路易吉', '马里奥'] heros[1] = '库里' print(heros) # 输出:['后羿', '库里', '路易吉', '马里奥']
heros = ['后羿', '库里', '路易吉', '马里奥'] a = heros.index('库里') print(a) # 返回元素的位置,输出:1 b = heros.index('林克') # 列表中没有值,会报错;error: '林克' is not in list
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] a = heros.count('库里') print(a) # 返回元素的位置,输出:2
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] print('林克' in heros) # 返回False
这里须要说明一下 sort & sorted 的区别:
sort 是对原列表进行排列,即原列表会改变;
sorted 是返回一个排列后的列表做为返回值,即原列表不会改变,会返回一个排序后的新列表;python
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] heros.sort() print(heros) # 输出:['后羿', '库里', '库里', '路易吉', '马里奥'] heros.sort(reverse=True) # 返序排列 print(heros) # 输出:['马里奥', '路易吉', '库里', '库里', '后羿'] a = sorted(heros) # 不会影响原列表,会返回一个排序后的新列表; print(a) # 输出:['后羿', '库里', '库里', '路易吉', '马里奥'] print(heros) # 输出:['马里奥', '路易吉', '库里', '库里', '后羿'] heros.reverse() # 翻转列表,与 heros.sort(reverse=True) 同样
能够用这种方法,循环列表中的全部元素;web
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] for hero in heros: print(hero) # 输出:后羿 库里 路易吉 库里 马里奥
使用这种方法循环,能够同时得到元素的index(位置信息),举例以下:app
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] for id,hero in enumerate(heros): print(id ,'--',hero) # 输出以下: # 0 -- 后羿 # 1 -- 库里 # 2 -- 路易吉 # 3 -- 库里 # 4 -- 马里奥
首先看如下代码:svg
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] copyheros = heros print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥'] heros[1] = '宙斯大魔王' print(heros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥'] print(copyheros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥']
咱们会有一个问题:为何copyheros 的值会变?!?! 这彷佛与咱们的想法不同。缘由以下:
这里:copyheros = heros ,其实并无复制,只是将 copyheros 指向了 heros,两个变量实际上是共享一个内存地址的,因此当其中任何一个方法变化,另外一个也会发生变化;图解以下:
因此,这里并无任何的复制发生!学习
若是以上的方法没法复制,那么咱们须要怎样才能复制列表呢? 答案是:咱们须要使用copy() 方法;ui
heros = ['后羿', '库里', '路易吉','库里', '马里奥'] copyheros = heros.copy() print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥'] heros[1] = '宙斯大魔王' print(heros) # 输出:['后羿', '宙斯大魔王', '路易吉', '库里', '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', '库里', '马里奥']
从上面的例子,咱们能够看到,更改heros 的元素后, copyheros 未发生变化;这里的copyheros 就是浅复制; 为何这样的复制还叫浅复制呢?请继续看~spa
前面讲了浅复制,所谓浅复制,通俗的说:就是只能复制列表中的第一层; 总所周知,列表是能够嵌套的,例如: [‘后羿’, ‘库里’, ‘路易吉’, [ ‘猎人’, ‘法师’, ‘牧师’ ] , ‘马里奥’],这里的列表中,出现了另外一个列表[ ‘猎人’, ‘法师’, ‘牧师’], 当出现这种状况时,浅复制没法复制列表中的列表,参考下面的例一;由于:列表中的列表依然只共享一个内存空间; 想要一个完整的复制,须要使用copy模块中的 deepcopy(), 举例如例二:code
例一: 浅复制的例子:xml
heros = ['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] copyheros = heros.copy() print(copyheros) # 输出:['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] heros[3][1] = '变身!!!' print(heros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥']
例二:深复制的例子:blog
import copy heros = ['后羿', '库里', '路易吉',[ '猎人', '法师', '牧师' ], '马里奥'] copyheros = copy.deepcopy(heros) print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '法师', '牧师'], '马里奥'] heros[3][1] = '变身!!!' print(heros) # 输出:['后羿', '库里', '路易吉', ['猎人', '变身!!!', '牧师'], '马里奥'] print(copyheros) # 输出:['后羿', '库里', '路易吉', ['猎人', '法师', '牧师'], '马里奥']
这里咱们能够获得如下结论: