列表:list是处理一组有序项目的数据结构,列表中的项目应该包括在方括号中,我们可以在列表里面存储各种数据类型不同的项目,每个项目之间用逗号隔开。列表是可变的数据类型,我们可以对它进行添加、删除、修改、查看等操作。
我们先定义一个列表,里面有字符串,数字,布尔值,列表这几种数据类型,然后对它进行输出
my_list=['DaYang','666',True,False,{2,3,4}]
print(my_list)
列表的常见操作
1.列表元素的查看
可以根据索引获取列表中每一个元素,索引是从零开始的。如果列标太长想直接获取最后一个元素,还可以用-1做索引,以次类推倒数第二个,倒数第三个
marvel=['钢铁侠','雷神','美国队长','绿巨人']
value1=marvel[1] #获取第二个元素
value2=marvel[2] #获取第三个元素
value3=marvel[-1] #获取最后一个元素
print(value1,value2,value3)
2.获取列表的长度
marvel=['钢铁侠','雷神','美国队长','绿巨人']
list_len=len(marvel)
print(list_len)
#当然我们还可根据len(marvel)-1直接获取最后一个元素
value=len(marvel)-1
print(marvel[value])
3.列表元素的添加
marvel=['钢铁侠','雷神','美国队长','绿巨人']
#通过append()方法进行添加
marvel.append('黑寡妇') #默认添加到最后
print(marvel)
#通过insert()方法指定添加
marvel.insert(0,'蜘蛛侠') #列表的第一个元素索引是从零开始的,然后以此类推
marvel.insert(3,'鹰眼')
print(marvel)
我们可以看到,黑寡妇被添加到最后一个位置,蜘蛛侠被添加到第一个位置,鹰眼被添加第四个位置
4.列表元素的删除
film_type=['科幻','爱情','恐怖','喜剧','动作','青春','悬疑','魔幻']
#(1)pop()方法
film_type.pop() #这里默认删除的是最后一个元素
print(film_type)
film_type.pop(1) #这里根据索引删除指定元素
print(film_type)
#(2)del方法
del film_type[5] #这里根据索引删除指定元素
print(film_type)
#(3)remove()方法
film_type.remove('恐怖') #这里根据列表里的名字进行删除
print(film_type)
注意:用remove方法来进行删除,如果要删除的元素的名字列表里不存在,那么它会报错
film_type.remove('枪战')
print(film_type)
5.列表元素的修改
marvel=['钢铁侠','雷神','美国队长','绿巨人']
marvel[1]='金刚狼'
marvel[3]='死侍' #根据下标直接赋值修改
print(marvel)
6.查找列表指定元素的索引值
marvel=['钢铁侠','雷神','美国队长','绿巨人']
number1=marvel.index('美国队长')
number2=marvel.index('绿巨人')
print('美国队长的索引值:%d\n绿巨人的索引值:%d'%(number1,number2))
7.列表里重复元素的个数
marvel=['钢铁侠','雷神','美国队长','绿巨人','钢铁侠','钢铁侠','雷神']
value1=marvel.count('钢铁侠')
value2=marvel.count('雷神')
print('钢铁侠出现的次数:%d\n雷神出现的次数:%d'%(value1,value2))
8.把一个列表里的元素添加到另一个列表里
superhero=['钢铁侠','雷神','美国队长','绿巨人']
dc_hero=['超人','蝙蝠侠','神奇女侠','海王']
#把dc_hero的元素添加到superhero,当然dc_hero里的元素依然存在
superhero.extend(dc_hero)
print(superhero,dc_hero)
9.使列表里元素的顺序颠倒过来
marvel=['钢铁侠','雷神','美国队长','绿巨人']
marvel.reverse()
print(marvel)
10.列表元素的排序
number=[4,6,5,2,9,3,1,7,10,8]
number.sort()
print(number)
#字母以字母顺序表排序
name=['BaiGe','LiHua','DaBai','LaoWang','Adam','HuangZai','ChenXing','ZhongYang']
name.sort()
print(name)
#向下面这样混合的,有特殊字符开头的优先级最高排在最前面,然后是数字开头的,小写字母开头的优先级最低,排在最后
blend=['BaiGe','*Li','LiHua','DaBai','Adam','4Zhao','alan']
blend.sort()
print(blend)
11.清除列表里的所有元素
marvel=['钢铁侠','雷神','美国队长','绿巨人']
marvel.clear()
print(marvel)
12.列表的copy操作
marvel=['钢铁侠','雷神','美国队长','绿巨人']
marvel2=marvel.copy() #我们对marvel进行copy
print(marvel)
print(marvel2)
marvel[1]='鹰眼' #我们把marvel的第二个元素改动一下
print(marvel)
print(marvel2)
我们会发现marvel2完全地copy了一份marvel,而且marvel里的元素修改的话,并不影响marvel2里的元素
如果我们在marvel里面在添加一个列表,并且还修改字列表里的元素,这会有什么情况发生呢?
marvel=['钢铁侠','雷神','美国队长','绿巨人',['dayang','ZhangJie']]
marvel2=marvel.copy()
marvel[1]='鹰眼'
marvel[4][0]='DaYang'
print('marvel:',marvel)
print('marvel2:',marvel2)
我们会发现marvel2列表里第一层的元素依然没有随着marvel里第一层元素的修改而发生变化。但是修改里marvel字列表里的元素,marvel2里的字列表里的元素也跟着发生了变化。这就是浅copy,意思就是marvel2 copy 的marvel第一层的元素不会改变,若果marvel第二层的元素改变的话,marvel2第二层的元素也会随着改变。
但是这显然不是我们想要的结果,我们要的是copy的完完整整的marvel,marvel2不会随着marvel里的元素的改变而改变。有浅copy当然也就有深copy,所以有个办法可以解决这个问题,就是导入copy这个模块,使用它里面的deepcopy()方法
import copy
marvel=['钢铁侠','雷神','美国队长','绿巨人',['dayang','ZhangJie']]
marvel2=copy.deepcopy(marvel) #深capy
marvel[1]='鹰眼'
marvel[4][0]='DaYang'
print('marvel:',marvel)
print('marvel2:',marvel2)
结果我们发现,marvel2完整的copy了一份marvel1,并没有随着marvel1里面的元素的改变而改变
13.列表的切片操作
film_type=['科幻','爱情','恐怖','喜剧','动作','青春','悬疑','魔幻']
#获取全部元素
print(film_type[0:])
print(film_type[:])
#获取前5五个元素
print(film_type[0:5])
print(film_type[:5])
#获取倒数三个元素
print(film_type[5:])
print(film_type[-3:])
#从第二个元素开始,每隔两个取一个元素
print(film_type[1::2]) #步长切片[起始:末尾:步长]
print(film_type[::2])