列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作,以[]标识,中间用逗号隔开
names
=
[
'aa'
,
"bb"
,
'cc'
] #names变量用列表来赋值
列表索引以0开头
names = ['aa',"bb",'cc','dd','ee']
print(names[0])#aa
print(names[-1])#ee
print(names[:-1])#['aa', 'bb', 'cc', 'dd']
print(names[:])#['aa', 'bb', 'cc', 'dd', 'ee']
print(names[1:3])#['bb', 'cc']顾头不顾尾
print(names[1::2])#['bb', 'dd']步长为2
append()追加,可以是任意参数,作用是往已有列表中添加元素,如果添加的是列表,就被当成一个元素存在原列表中,只使list长度增加1.
names = ['aa',"bb",'cc','dd','ee']
#names.append('ff')
print(names)#['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
names.append(["d1","d2"])
print(names)#['aa', 'bb', 'cc', 'dd', 'ee', ['d1', 'd2']]
insert()插入 insert(index,obj)列表与方法之间用点号相隔,括号内需要添入的参数分别是索引和要插入的元素
names = ['aa',"bb",'cc','dd','ee']
names.insert(2,"a1")
print(names)#['aa', 'bb', 'a1', 'cc', 'dd', 'ee']
修改
names = ['aa',"bb",'cc','dd','ee']
names[2]="a1"
print(names)#['aa', 'bb', 'a1', 'dd', 'ee']
删除
names = ['aa',"bb",'cc','dd','ee']
方式1 del:
del names[2]
print(names)#['aa', 'bb', 'dd', 'ee']
方式2 remove:
names.remove("cc")
print(names)#['aa', 'bb', 'dd', 'ee']
方式3 pop:
names.pop()
print(names)#['aa', 'bb', 'cc', 'dd']默认是删除最后一个,指定索引就删除对于索引的元素
这里按索引
names.pop(2)
print(names)#['aa', 'bb', 'dd', 'ee']
扩展extend
names = ['aa',"bb",'cc','dd','ee']
aa = [1,2,3]
names.extend(aa)
print(names,aa)#['aa', 'bb', 'cc', 'dd', 'ee', 1, 2, 3] [1, 2, 3]
复制copy
names = ['aa',"bb",'cc','dd','ee']
names2 = names.copy()
print(names2)#['aa', 'bb', 'cc', 'dd', 'ee']
copy()与deepcopy()之间的区分必须要涉及到python对于数据的存储方式。
首先直接上结论:
—–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。
—–而浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的复制有所不同了。
对于简单的 object,用 shallow copy 和 deep copy 没区别
复杂的 object, 如 list 中套着 list 的情况,shallow copy 中的 子list,并未从原 object 真的「独立」出来。也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。这跟我们直觉上对「复制」的理解不同。
names = ['abc','def',["baby",22]]
print(names)
names2= names.copy()#跟copy.copy(names)等价
names[2][0] = "BaBy"
print(names)#['abc', 'def', ['BaBy', 22]]
print(names2)#['abc', 'def', ['BaBy', 22]] 这个是浅copy
import copy
names = ['abc','def',["baby",22]]
print(names)
names3 = copy.deepcopy(names)
names[2][0] = "BaBy"
print(names)#['abc', 'def', ['BaBy', 22]]
print(names3)#['abc', 'def', ['baby', 22]]这个是深copy
按照最外层的来修改,也可看成是简单的对象
names = ['abc','def',["baby",22]]
print(names)
names3 = copy.copy(names)
names[2] = ['BaBy', 22]
print(names)#['abc', 'def', ['BaBy', 22]]
print(names3)#['abc', 'def', ['baby', 22]]
计数count
names = ['aa',"bb",'cc','dd','aa']
names2 = names.count("aa")
print(names2)#2
清空clear
names = ['aa',"bb",'cc','dd','aa']
names.clear()
print(names)#[]
排序sort、reverse
names = ['1aa',"Cbb",'1cc','dd','aa']
names.sort()
print(names)#['1aa', '1cc', 'Cbb', 'aa', 'dd']按照ASCII码表的顺序来排序
names2 = ['aa',"bb",'cc','dd','ee']
names2.reverse()
print(names2)#['ee', 'dd', 'cc', 'bb', 'aa']
下标index
names = ['aa',"bb",'cc','dd','ee']
print(names.index('bb'))#1
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
names = ('aa',"bb",'aa','dd','ee')
print(names.count("aa"))#2
print(names.index('bb'))#1