python的list使用进阶
列表函数&方法的对象不仅可以是字符串也可以是列表
list常用函数方法
append()添加列表项
这种类似直接赋值,或者我们可以使用list[3] = ‘c’方法:
list.append(obj)
示例:
a = [‘1’,’a’,’b’]
a.append(‘c’)
print(a)
当我们追加的是一个变量时我们就需要注意append的深拷贝和浅拷贝
浅拷贝:在 Python 中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python 并没有拷贝这个对象,而只是拷贝了这个对象的引用。
简单的将就是append函数只是引用了变量中的值,一旦变量的值发生变化,其列表中引用的也会发生变化.
a = ['1','a','b']
nums = ['2','3','4']
a.append(nums)
print(a)
nums.pop()
print(a)
一旦我们移除了最后一个元素,b发生了改变,那么a也会发生变化,这就是浅拷贝。
深拷贝:在 Python 中,为了使当进行赋值操作时,两个变量互不影响,可以使用 copy 模块中的 deepcopy 方法
import copy
a = ['1','a','b']
nums = ['2','3','4']
a.append(copy.deepcopy( nums ) )
print(a)
nums.pop()
print(a)
- len(list)列表元素个数
- max(list)返回列表元素最大值
- min(list)返回列表元素最小值
- list(seq) list(seq)用于将元组或字符串转换为列表
元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中
list.append(obj)
在列表末尾添加新的对象 - list.count(obj)
统计某个元素在列表中出现的次数 - list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) - list.index(obj)
从列表中找出某个值第一个匹配项的索引位置 - list.insert(index, obj)
将对象插入列表 - list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 - list.remove(obj)
移除列表中某个值的第一个匹配项 - list.reverse()
反向列表中元素 - list.sort( key=None, reverse=False)
对原列表进行排序 - list.clear()
清空列表 - list.copy()
复制列表
list判断语句
使用传统的方法可以通过判断list的长度进行
if len(mylist):
print('非空列表')
else:
print('The list is empty,空列表')
由于一个空 list 本身等同于 False,所以我们可以使用
if mylist:
print('非空列表')
else:
print('The list is empty,空列表')
list读取
二维数组的读取
创建一个二维数组
list_2d = [[0 for col in range(cols)] for row in range(rows)] cols为列数,rows为行数
list_2d = [[0 for col in range(5)] for row in range(5)]
list_2d[0].append(1)
list_2d[0].append(2)
list_2d[2].append(3)
list_2d[0].append(4)
list_2d[0].append(5)
print(list_2d)
间隔读取lsit
lsit[start
span]
tart:起始索引,从0开始,-1表示结束
end:结束索引
step:步长,end-start,步长为正数时,从左向右取值。步长为负数时,反向取值
a = [i for i in range(0,15)]
print(a[::2]) #从开始到结束,步长为2 ,从左到右
print(a[:-1]) #从位置0到位置-1之前的数
print(a[:-2]) #从位置0到位置-2之前的数
print(a[1:5:2]) #从位置1到位置5之前的数,步长为2
print(a[::-1]) #从开始到结束,步长为-1
list推导式书写形式
[表达式 for 变量 in 列表]
或者
[表达式 for 变量 in 列表 if 条件]
li = [1,2,3,4,5,6,7,8,9]
#每个结果的平方
print ([x**2 for x in li])
#大于5的结果的平方
print ([x**2 for x in li if x>5])
#转化为字典,并且将其赋值为自身的10倍
print (dict([(x,x*10) for x in li]))
#数组(x,y)x大于3,取2模,不取整,y为大于8
print ([ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ])
#两个列表对应位置相加
vec=[2,4,6]
vec2=[4,3,-9]
sq = [vec[i]+vec2[i] for i in range(len(vec))]
print (sq)
#乘法表,双重循环
print ([x*y for x in [1,2,3] for y in [1,2,3]])
#调用函数进行赋值乘2
testList = [1,2,3,4]
def mul2(x):
return x*2
print ([mul2(i) for i in testList])
#结果
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[36, 49, 64, 81]
{ 1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90}
[(5, 9), (7, 9), (9, 9)]
[6, 7, -3]
[1, 2, 3, 2, 4, 6, 3, 6, 9]
[2, 4, 6, 8]
判断某个列表是否是另一个列表的子列表
a = ['sa1','sa5','sa8']
b = ['sa1','sa5','sa8','sa10']
res = set(ls1).issubset(set(ls2))
print(res)
True
list使用常见错误
list不能和str直接进行拼接
错误显示:
IndexError: list index out of range这是一种错误的写法,list不能和str拼接,否则会报错
list = [‘sfa’,’33’,’zhang’,’san’]
a= ‘这是列表’
print(list+a)列表超出索引范围
错误显示:
IndexError: list index out of range例子
a=[]
print(a[0])
这种情况发生是因为只定义了一个空列表,没有进行任何的赋值,所以列表里什么也没有,而后面的报错也明确表示了索引超出范围,即写上的0其实是第一位值的位置,而此时是空列表没有赋值,故而报错。
#解决方法:
print(a[0:])
把这个列表 a 里的所有值都输出
还没有评论,来说两句吧...