列表是由一系列按特定顺序排列的元素。
1 name = ['cc',1,'yy',(2,3),'fly'] 2 print(name[0])#cc 3 print(name[3][0])#2
既然是有序的我们就可以通过索引来获得,name[]。 从上述代码中我们可以看出,列表可以存储,数字字符串元组甚至列表字典。
访问name列表内索引为3的元组,我们可以再加一个索引访问到元组内的值。
len()方法获得列表长度len(name)
删除元素
1.del
当我们删除后不再调用该值时使用
del name[0] 删除name列表的索引为0的值,只有当我们知道索引位置时可以用到del,删除后我们将无法访问到它
2.pop()
如果我们删除一个值后还要访问他的值,我们可以用pop()方法
1 p1 = name.pop(0) 2 print(name,p1)#[1, 'yy', (2, 3), 'fly'] cc 3 print(name.pop())#fly
同样pop()方法也通过索引位置删除元素,如果没填索引位置的话会默认列表末尾。代码第一行中我们可以看到,pop()方法会返回删除的值,我们可以赋值给变量,进行调用
3.remove()
前两种方法都是用索引删除元素的,remove()方法是通过元素值来删除的。
1 cars = ['bmw','qq','byd'] 2 cars.remove('qq') 3 print(cars)
remove("qq")括号内传入需要删除的值得元素.值得注意的是,remove()方法值删除第一个指定的值,如果要都删干净要循环判断是否删除了所有的这样的值
增加元素
1 team = ['RNG','EDG','OMG'] 2 team.append('IM') 3 print(team)
append()方法,在列表的最后一个位置添加元素
替换元素
insert()方法,在指定位置加入元素,第一个参数索引位置,第二个参数值
team.insert(0,'White')
排序
1 grade_scort = [1,2,8,6,'a','A','b','y','a','A'] 2 num_sc = grade_scort[:4] 3 print('scorted 临时排序结果%s' % sorted(num_sc)) 4 print('scorted 排序后列表%s' % num_sc)
sorted()方法和sort方法
sorted(num_sc)对列表进行临时性的排序,不会改变原列表。
1 num_sc.sort() 2 print('sort排序后原num_sc %s' % num_sc)
num_sc.sort 对列表进行排序通过第二行输出可以看出,改变了列表
我们不仅可以对数字进行排序,还可以对字母排序(按ascii码进行排序),ascii码中a和A所转换成的数字是不一样的
a_sort = grade_sort[5:] print(a_sort)#['A', 'b', 'y', 'a', 'A'] a_sort.sort() print(a_sort)#['A', 'A', 'a', 'b', 'y'] for x in grade_sort[5:]: print('%s 对应的数字是 %s' % (x,ord(x)))
可以看出大写所对应的整数比小数要小,通过for循环我们也得到了对应的整数。
sort和sorted默认的排序都是由小到大,我们要从大到小怎么办呢,可以增加参数 reverse默认=False 由小到大,改为True就是由大到小
num_sort.sort(reverse = True) print(num_sort)
反向打印列表
reverse() 这里说到的反向打印说的是索引位置反向打印,而不是排序反向打印需要注意
num_sort.reverse()
创建数字列表
不得不提到range()函数,python中range函数可以轻松生成一系列的数字
我们可以通过如下方式获得
1 print('range(10)生成的数字') 2 for x in range(10): 3 print(x,end=' ') 4 print('\nrange(1,11)生成的数字') 5 for x in range(1,11): 6 print(x,end = ' ') 7 print('\nrange(1,11,2)生成的数字') 8 for x in range(1,11,2): 9 print(x,end = ' ')
当我们只传入一个数字时比如range(10),range函数会默认从0开始生成,同样的顾头不顾尾。0-9。
那我们想获得1-10怎么办呢,可以再传入一个参数,range(1,11)这样就能得到,1-10
我们甚至可以控制,获得数的间隔,想获得奇数可以再传入第三个参数 range(1,11,2)。
可以看到我在,print函数内传入了end。因为没输出一个就要换一行。我们可以通过end = ''来阻止换行。如果没填的话默认是换行,我们换成 end = ' '。这样每输出一个就加一个空格
我们通过type()发现range()返回的是range类型,我们要怎么获得一个数字列表呢,可以使用list()方法
list1 = list(range(1,11,2))
练习: 获得1-10的平方数组
1 list1 = [] 2 for x in range(1,11): 3 square = x*x 4 list1.append(square) 5 print(list1)
通过第一行代码,创建一个空的列表
通过for循环,将1-10的平方添加到列表内。
为了简化代码,我们不用square变量,直接写在append里可以这样写。 提一下 python通过**代表幂,比如平方x**2
1 list1 = [] 2 for x in range(1,11): 3 list1.append(x**2) 4 print(list1)
在python中有很多对数字列表进行操作的函数比如
1 list2 = [1,9,22,10,35,100] 2 print('数组最大值',max(list2)) 3 print('数组最小值',min(list2)) 4 print('数组和',sum(list2))
列表解析
前面生成一个数字列表需要3 4 行代码,而列表解析让你只需要一行代码就能生成这样的列表。列表解析将for循环和创建新元素合并成一行,并自动附加新元素。
1 square1 = [x**2 for x in range(1,11)] 2 print(square1)
列表同样可以使用切片,获取列表内的片段。
复制一个列表
square2 = square[:]
这里是通过切片获得,square1的全部元素。我们为什么不用=呢
1 square1 = [x**2 for x in range(1,11)] 2 print(square1) 3 4 square2 = square1[:] 5 square1.append('s1') 6 square2.append('s2') 7 print('切片赋值,s1 显示',square1) 8 print('切片赋值,s2 显示',square2) 9 10 square3 = square1 11 square1.append('end1') 12 square3.append('end3') 13 print('直接用s3=s1,s1 显示',square1) 14 print('直接用s3=s1,s3 显示',square3)
通过运行上述代码,我们发现通过切片赋值对新列表操作不会影响原列表。而通过=创建的列表,对其操作会影响原列表。 我们最好使用切片对一个列表进行复制