Python-列表
列表基础
列表定义:一有序数据集合用逗号间隔用方括号括起来
列表的索引访问(索引list_name[index]和切片list_name[start:end:step])
1 wu=[1,2,3,4] 2 print(wu[1]) 3 wu[1]=[5,6,7] 4 print(wu) 5 print(wu[1][1])
[root@localhost ~]# python 1.py 2 [1, [5, 6, 7], 3, 4] 6
列表遍历
1 wu=[1,2,3,4] 2 #### iteror 3 for i in wu: 4 print(i), 5 #print(i,) 6 #print(i) 7 print('') 8 i=0 9 while i<len(wu): 10 print(wu[i]), 11 i +=1
[root@localhost ~]# python 1.py 1 2 3 4 1 2 3 4
理解for迭代
1 a=range(1,10) 2 for x in a: 3 print('for',x) 4 a.pop(1) 5 print(a)
[root@localhost ~]# python 1.py ('for', 1) [1, 3, 4, 5, 6, 7, 8, 9] ('for', 3) [1, 4, 5, 6, 7, 8, 9] ('for', 5) [1, 5, 6, 7, 8, 9] ('for', 7) [1, 6, 7, 8, 9] ('for', 9) [1, 7, 8, 9]
列表里的最大值
1 li=[23,45,55,66,743] 2 i=1 3 max=li[0] 4 while i<len(li): 5 if li[i]>max: 6 max=li[i] 7 i +=1 8 print('max',max) 9 print('###') 10 max=li[0] 11 for i in li: 12 if i>max: 13 max=i 14 print('max',max)
[root@localhost ~]# python 1.py ('max', 743) ### ('max', 743)
找第二大值
1 li=[23,45,55,66,743] 2 i=0 3 max1=li[0] 4 max2=li[0] 5 while i<len(li): 6 if max1<li[i]: 7 max2=max1 8 max1=li[i] 9 else: 10 if max2<li[i]: 11 max2=li[i] 12 i +=1 13 print('max1',max1) 14 print('max2',max2)
[root@localhost ~]# python 1.py ('max1', 743) ('max2', 66)
方法二:
1 li=[23,45,55,66,743] 2 i=0 3 max1=li[0] 4 max2=li[0] 5 for x in li: 6 if max1<x: 7 max2=max1 8 max1=x 9 else: 10 if max2<x: 11 max2=x 12 print('max1',max1) 13 print('max2',max2)
列表运算
列表加法
1 li1=[1,2,3] 2 li2=[4,5,6] 3 li=li1+li2 4 print(li)
[root@localhost ~]# python 1.py [1, 2, 3, 4, 5, 6]
1 li1=range(1,10) 2 li2=range(11,20) 3 print(li1) 4 print(li2) 5 i=0 6 while i <len(li1): 7 li1[i] += li2[i] 8 i +=1 9 print(li1)
[root@localhost ~]# python 1.py [1, 2, 3, 4, 5, 6, 7, 8, 9] [11, 12, 13, 14, 15, 16, 17, 18, 19] [12, 14, 16, 18, 20, 22, 24, 26, 28]
打印多层列表
index函数
1 li=range(1,11) 2 print(li) 3 print(li.index(6))
[root@localhost ~]# python 1.py [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5
index函数
>>> li=range(1,11) >>> li [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> li[3:9] [4, 5, 6, 7, 8, 9] >>> li[-7:-1] [4, 5, 6, 7, 8, 9] >>> li[li.index(4):li.index(9)+1] [4, 5, 6, 7, 8, 9]
正负坐标的关系
>>> li=range(10,2100,2) >>> li[li.index(120):li.index(160)+1] [120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160] >>> li[li.index(120)-len(li):li.index(160)+1-len(li)] [120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160]
li=range(1,11)
1 >>> li[3:8] 2 [4, 5, 6, 7, 8] 3 >>> li[-7:-2] 4 [4, 5, 6, 7, 8] 5 >>> li[3:8:1] 6 [4, 5, 6, 7, 8] 7 >>> li[-7:-2:1] 8 [4, 5, 6, 7, 8] 9 >>> li[li.index(4):li.index(8)+1] 10 [4, 5, 6, 7, 8] 11 >>> li[li.index(8):li.index(4)-1:-1] 12 [8, 7, 6, 5, 4] 13 >>> li[:] 14 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 15 >>> li[::-1] 16 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
insert函数
1 li=['wujiadong'] 2 print(li) 3 li=list('wujiadong') 4 print(li) 5 li.insert(1,12) 6 print(li)
指定位置插入数据
1 li1=range(1,5) 2 li2=range(10,15) 3 i=0 4 while i< len(li2): 5 li1.insert(2,li2[len(li2)-1-i]) 6 i +=1 7 print(li1) 8 #index max:len()-1
函数append()和extend()
1 li1=range(1,5) 2 li2=range(6,11) 3 li1.append(li2) #li2列表整体加上去 #L.extend(iterable),可迭代的,假如是一个整型9 就不行 4 print(li1) 5 li1.extend(li2) #列表中的元素加上li1去 #L.append(object) 6 print(li1)
1 li1=list('abc') 2 li2=list((1,2,3)) 3 print(li1) 4 print(li2) 5 li1.extend(li2) 6 print(li1) 7 li1 +=li2 8 print(li1)
用append实现extend
1 li1=range(1,5) 2 li2=range(6,11) 3 i=0 4 while i<len(li2): 5 li1.append(li2[i]) 6 i +=1 7 print(li1)
字符串和列表转元组
1 a='wu jia dong ' 2 a1=a.split() 3 print(a1) 4 a2=tuple(a1) 5 print(a2) 6 a=[1,2,3] 7 a3=tuple(a) 8 print(a3)
pop()函数 ——L.pop([index]) ,不写数字默认为最后一个
1 li = range(1,5) 2 li.pop() 3 print(li) 4 li=range(1,5) 5 li.pop(2) 6 print(li)
split()函数
描述: split()通过指定分隔符对字符串进行分割,如果参数num 有指定值,则仅分隔 num 个子字符串
语法:str.split(str="", num=string.count(str))
参数:str ——分隔符,默认为空格 ,num -- 分割次数
1 a='hello wujia dong ' 2 a1=a.split() #按空格分割,删除空格 3 a2=a.split('o',1) #按o分割,删除o,分割1次 4 print(a1) 5 print(a2)
pop掉某个元素
1 li=[1,2,3,1,1,3,1,1,3,3,] 2 i=0 3 while i<len(li): 4 if li[i]==1: 5 li.pop(i) 6 i -=1 #?没搞懂这个 7 i +=1 8 print(li)
在理解上面的基础上删除重复的元素(一分为二思想)
1 li=[1,2,3,1,1,3,1,1,3,3,] 2 i=0 3 while i<len(li): 4 if li[i]==1: 5 temp1=li[:i+1] 6 temp2=li[i+1:] 7 break #? 8 i+=1 9 i=0 10 while i<len(temp2): 11 if temp2[i]==1: 12 temp2.pop(i) 13 i -=1 14 i +=1 15 print(temp1+temp2)
1 li=[1,3,2,2,3,2,1,3] 2 i=0 3 while i<len(li): 4 if li[i]==2: 5 li.pop(i) 6 i -=1 7 i +=1 8 print(li)
如果要删除所有重复的元素,重复的只留一个,怎么做?
############没有看懂###############
1 li=[1,2,3,4,2,2,3,2,3,2,4,5,6,4,78] 2 print(li.count(2)) 3 i=0 4 while i<len(li): 5 pf=li.index(li[i]) 6 if li.count(li[i])>1: 7 li.pop(li.index(li[i],pf+1)) 8 i -=1 9 i +=1 10 print(li)
remove()函数——L.remove(value)
1 li=[1,3,2,2,3,2,1,3] 2 i=0 3 while i<li.count(2): #随着2 的删除,li.count(2)发生了变化,产生1<2导致没有全部删除 4 5 li.remove(2) #remove 是删除值 6 i +=1 7 print(li) #为什么2没有全部删除掉 8 print('.........................') 9 li=[1,3,2,2,3,2,1,3] 10 i=0 11 x=li.count(2) #2的个数在循环外,这样就不会随着循环而改变了 12 while i<x: 13 li.remove(2) 14 i +=1 15 print(li)
去重的另一种办法:
1 li=[1,2,3,4,5,56,2,3,54] 2 it =[] 3 i=0 4 while i<len(li): 5 if li[i] not in it: 6 it.append(li[i]) 7 i +=1 8 print(it) #重复的没有添加进去
1 it=[] 2 for x in li: 3 if x not in it: 4 it.append(x) 5 print(it) #重复的没有添加进去
方法三:(去重比较方便)
1 it=[] 2 it=list(set(li)) #不添加重复的,结果和上面一样 3 print(it)