列表
Python中的列表,可以视为java中的集合,是一个各种类型数据的集合。当然列表可以为空。
list1=[1,2.34,"name",4+5j] list2=[2,34,567,89] list3=[] list4=[list1,list2,list3]
访问列表内容
Python中的列表,可以访问一个元素或多个元素的子集。访问子集的方法跟字符串类型类似,同样范围为【x,y),包含x,不包含y.
print("list1 : ",list1) print("list2 : ",list2) print("list3 : ",list3) print("list4 : ",list4) print("list1[0]",list1[0]) print("list2[2:3]",list2[2:4]) print("list4[2:3]",list4[2:3])
相应结果为
list1 : [1, 2.34, 'name', (4+5j)] list2 : [2, 34, 567, 89] list3 : [] list4 : [[1, 2.34, 'name', (4+5j)], [2, 34, 567, 89], []] list1[0]= 1 list2[2:3]= [567, 89] list4[2:3]= [[]]
增删改查
添加数据
list1.append("breakloop") #追加数据 list1.insert(0, "hello") #插入数据 list1.insert(1, "world") list1.insert(3, "world") print("list1 =", list1)
相应结果为
list1 = ['hello', 'world', 1, 'world', 2.34, 'name', (4+5j), 'breakloop']
删除数据
del(list1[0]) print("list1 = ",list1) list1.remove("world") print("list1 = ",list1) list1.clear() print("list1 = ",list1)
相应数据为
list1 = ['world', 1, 'world', 2.34, 'name', (4+5j), 'breakloop'] list1 = [1, 'world', 2.34, 'name', (4+5j), 'breakloop'] list1 = []需要指出的是,remove一次只能移出一个元素,即使是列表中存在多个同样的元素。
修改数据
print("list2[3] = ",list2[3]) list2[3]=890 print("list2[3] = ",list2[3])
相应结果为
list2[3] = 89 list2[3] = 890
查找数据
print("is 34 existed in list2? ", 34 in list2) print("is 34 existed in list2, index scrope from 1 to 3? ",list2.index(34, 1,3)) print("is 34 existed in list2, index scrope from 0 to 1? ",list2.index(34, 0,1))
需要指出的是,
(1)查询范围,仍是【x,y)
(2)若未查到相应数据,将会报错"ValueError: 34 is not in list",而非返回-1,与字符串操作不同。
其它工具方法
print("list2 length = ", len(list2)) #获取长度 print("list2 +list2 =", list2+list2) #拼接 print("list2 = ", list2) list2=list2*3 #复制 print("list2 * 3 = ", list2) print("list4 = ", list4) #修改list2后,并不影响list4的值 print("max item in list2 = ", max(list2)) #获取列表中的最大值,前提:列表中必须为相同类型 print("min item in list2 = ", min(list2)) #获取列表中的最小值,前提:列表中必须为相同类型 print("34 count =", list2.count(34)) #获取某一元素出现的次数 list2.reverse() #反序 print("list2 reverse", list2) print("list1", list1) list1=list2.copy() #复制 print("list1", list1)
相应结果为
list2 length = 4 list2 +list2 = [2, 34, 567, 890, 2, 34, 567, 890] list2 = [2, 34, 567, 890] list2 * 3 = [2, 34, 567, 890, 2, 34, 567, 890, 2, 34, 567, 890] list4 = [[], [2, 34, 567, 890], []] max item in list2 = 890 min item in list2 = 2 34 count = 3 list2 reverse [890, 567, 34, 2, 890, 567, 34, 2, 890, 567, 34, 2] list1 [] list1 [890, 567, 34, 2, 890, 567, 34, 2, 890, 567, 34, 2]
问题:
(1)如果对字符串列表取最大最小值,会如何?
list5=["abcd","abca","abcdef","abcdefg",b]
对应结果如下
max item in list5 = b min item in list5 = abca
可见,是依次对比的字母的ascii码值,若相同则继续下一位。直至一者长度不足,或ascii码值大小已分。
在一者长度不足的情况下,长度短者小,长度长者大。即“abcd”<“abcdef”
(2)如果对含有复数的整形数据列表,或仅包含复数列表取最大最小值,会如何?
list6=[1,2,5,3.8,5+1j,0,-1] list7=[1+2j,2+3j,4+5j,5-6j,-7+8j]
结果报错
TypeError: '>' not supported between instances of 'complex' and 'int' TypeError: '>' not supported between instances of 'complex' and 'complex'
遍历列表
for a in list1: print(a)
一定要注意第一行的“:”不能丢
栈
列表提供了append和pop方法,使得列表又了栈(后进先出)的功能。
print("list1 = ", list1) print("list 1 pop = ", list1.pop()) print("list1 = ", list1) print("list 1 pop = ", list1.pop()) print("list1 = ", list1) print("list 1 pop = ", list1.pop()) print("list1 = ", list1)
相应结果为
list1 = [890, 567, 34, 2, 890, 567, 34, 2, 890, 567, 34, 2] list 1 pop = 2 list1 = [890, 567, 34, 2, 890, 567, 34, 2, 890, 567, 34] list 1 pop = 34 list1 = [890, 567, 34, 2, 890, 567, 34, 2, 890, 567] list 1 pop = 567 list1 = [890, 567, 34, 2, 890, 567, 34, 2, 890]