Python列表,字典和字符串操作


列表:

列表:list, 也叫數組,表現[].
特點:有角標,元素可以重復,有序的元素

例子:
stus = ['王志華','喬美玲','喬美玲','王文文','feixiang']#中括號,這就是一個list;
只有加了引號就是字符串兒(如stus = ‘['王志華','喬美玲','喬美玲','王文文','feixiang']’)
下標:中括號中每個名字的序數,也稱角標,索引
元素:列表中各個內容,如王志華
!特別注意,下標是從0開始的。

stus2 = []
stus3 = list()
#都是定義空的list

增加元素(倆種方法,末尾和指定位置)
stus.append('趙燕')#在list末尾增加一個元素
stus.insert(0,'楊靜')#在指定下標位置增加元素。
stus.insert(20,'蔡進')如果指定位置不存在,會加在末尾

print('stus的長度是',len(stus))#取元素個數


stus[3] = '蔡康永'#找到下標,直接賦值更改
print('改完之后的',stus)
print(stus[-1])#負表示從后邊開始數,用於查找后邊數據


刪除
stus.pop()#pop默認刪除最后一個元素
stus.pop(2)#刪除角標為2,即第三為元素
stus.remove('喬美玲')#刪除輸入的元素
stus.pop(8)#下標8的元素不存在,會報錯
stus.remove('喬美')#喬美元素不在列表,會報錯
del stus[-1]#也是刪除指定的元素
stus.clear()#清空


result= stus.count('喬美玲')#查詢輸入元素在list里面出現的次數
result= stus.count('喬美')#不存在的元素,會出現0
no = stus.index('喬美玲')#找元素的下標
no2 = stus.index('喬美玲')#list中有倆個或幾個,只會返回最前邊一個的下標
no3 = stus.index('喬美')#找不在表中元素的下標,會報錯
stus.reverse()#反轉(轉置)
stus.sort()#排序,按字母數字排的,文字沒法排
nums = [3,6,2,6,3,9,1]
# nums.sort()
# nums.reverse()
# nums.sort(reverse=True)#排序后又反轉,會改變排序方式
nums.extend(stus)#把一個list的元素加入到另一個list
# print(nums)

布爾類型
True False

print(1>2)
if '喬美玲' in stus:#也可以用 if stus.count('喬美玲') is not 0:
print('同學存在')
else:
print('同學不存在')

stus = ['楊靜', '王志華', '王銀梅', '喬美玲','段鑫琪', '王立文', '趙燕','楊華', '周永波', '楊靜']
for s in stus:#列表直接循環,是取的元素。
print('s的值是%s'%s)
如果直接循環一個list,那么每次取值的就是list里邊的每個元素。
for i in range(len(stus)):
print(i)

index = 0
while index < len(stus):
print(index)
index += 1
p = xpinyin.Pinyin()
for s in stus:
stu_pinyin = p.get_pinyin(s,'')
print(stu_pinyin)

for i in range(len(stus)):
print('下標是%s,值是%s'%(i,stus[i]))

for index,stu in enumerate(stus):#同時取到下標和值
print('%s ==> %s'%(index,stu))

for index,stu in enumerate(stus,1):#同時取到下標和值,加1取下標從1開始
print('%s ==> %s'%(index,stu))

choice = ['注冊','登錄','退出','購物']
print('輸入編號進入對應的操作')
for index,c in enumerate(choice,1):
print('%s ==> %s'%(index,c))

多維數組
stu2 = [1,2,3,4,['a','b','c',['哈','哈哈']]] #三維數組
print(stu2[4][1])#一層層找,先找到第一層的第4個元素,再第二層的第1個元素,這個結果為b
print(stu2[4][3][1])#一層層找,先找到第一層的第4個元素,再第二層的第3個元素,然后第三層的第一個元素,這個結果為哈哈
stu2[4][3].insert(1,'蔡進')#一層層找,先找到第一層的第4個元素,再第二層的第1個元素
#print(stu2)

切片:list取值的一種方式,它指定范圍取值
stu4 = [1,2,3,4,5,6,7,8]
#print(stu4[2:5])#切片取值,顧頭不顧尾。即沒有取到6.
#print(stu4[:5])#從最前面開始取
#print(stu4[2:8])#取到8,比最后一位的角標大一位
#print(stu4[2:])#取到最后面
#new_stu = stu4[:]#復制了一個新的list
#print(stu4[:])
#print(stu4[0:8:2])#隔一個取一個,2是步長,寫的2,實際上跳過了1個。為1時不用跳
#print(stu4[0:8:-1])#變成了空
#print(stu4[::-1])#步長為負數的時候,為從右往左取值
#print(stu4[-1:-9:-2])#前邊加數組,且不為負數時,變成了空。
#new_stu = stu4#下節課講

#下標、切片、長度、循環 同樣適用於字符串,但不能修改。
#name = '馬上要吃飯了'
#print(name[3],len(name))
#for i in range(len(name)):
# print(i)


字典: 列表很難存儲大量信息,用起來也不方便,而且效率很低,就引入了字典。# stus=['王志華','喬美玲','段鑫琪','王立文']# stu_info = [

# ['王志華','18''女''address']
#     ['喬美玲','18''女''address']
# ['段鑫琪','18''女''address']
# ['王立文','18''女''address']
# ]
# for stu in stu_info:
# if stu[1] == "喬美玲":


字典:
#stu_info = {'name':'王志華','age':'18','addr':'北京'}#大括號,字典;是key-value形式
!字典里邊的key是唯一的,否則后邊的會覆蓋前邊的;
!元素是亂序的。

取值
# print(stu_info)#取字典
# print(stu_info['name'])#取key為name是的值
# print(stu_info['age'])#取key為age時的值
!jason同字典外觀一樣,但jason就是字符串兒,只是個格式長得非常像。


# print(stu_info)
# print(stu_info['name'])#查name的value,不存在時會報錯
# print(stu_info.get('name',500))#.get后邊可以指定不存在時報的結果,會出現500
加.get,當key存在時,跟沒get是一樣的。
但不存在時,會報None,即空空的,也不報錯。但沒get的會報錯。
# print(stu_info['age'])

修改
# stu_info['addr']='上海'#直接復制修改
# print(stu_info)

新增
#stu_info['phone']='1233434'#key不存在時,會新增 #不安全,存在時會改變phone的值。
# stu_info.setdefault('email','ddd@163.com')#key不存在時會新增,存在時不改變
!stu_info.setdefault('age','19')#key存在時,值不會新定義
# print(stu_info)

刪除
#stu_info.pop('phone')
#stu_info.clear()#清空這個字典
#stu_info.popitem()#從字典里面隨機刪除一個元素
#print(stu_info)
#字典沒有順序

# d1={}
# d2={'a':'v'}
# d1.update(d2)#把d1更新為d2
# print(d1)

# print(stu_info.keys())#取所有的key
# print(stu_info.values())#取所有的value
# print(stu_info.items())#取所有的元素

直接循環字典,看看每次循環的是字典的key
# for k in stu_info:#循環字典,叫啥無所謂,循環的是key
# print(k)

判斷
#print('name' in stu_info)#判斷這個key存不存在
#print('name' in stu_info.keys())#判斷這個key存不存在,需要將所有的key拿出來列表再判斷,沒上邊的快。

#for i in stu_info:#循環字典,叫啥無所謂,循環的是key,比下邊的方法快
# s='%s=>%s'%(i,stu_info.get(i))
# print(s)

# for j,v in stu_info.items():#倆個值,取key和value。因為需要列表,所有很慢
# b='%s=>%s'%(j,v)
# print(b)

多維字典:
# stu_info={
# '小明':{'passwd':'123456','phone':'132323','age':'18'},
# '小黑':{'passwd':'223456','phone':'232323','age':'28'}
# }
# print(stu_info['小明']['phone'])#層層定位再取值

d = {
'春波':{
"car":{'BMW':5,'BENZ':3,'audi':3,'byd':4},
"house":["北京",'南京','上海'],
"money":1000000,},
'喬美玲':{
"bag":['xx','lv',],
"house":['三環','4環'],
"hzp":['skii','ysl'],
'language':{
'普通話':10,
'東北話':20,
'日語':0,
'英語':4
}
}
}
#馬春波賣了一套上海的房子,賣了500萬
# d['春波']['house'].pop(2)
# d['春波']['money']+=5000000
#算一下馬春波有多少輛車
#m=d['春波']['car'].values()
#馬春波花了100萬買了一輛勞斯萊斯

#喬美玲的東北話降級了,從20變成了10

#喬美玲會哪些語言

#print(d)


字符串
t='user1,user2,user3,user4,user5,user6,user7'
print('分隔符',t.split(','))#取列表,按照某個字符來分割字符串兒
print('',t.split())#什么都不傳,按空格分開。沒有空格就認為是一個元素

cars = ['ad','cd','ef']
print('、'.join(cars))#以某個字符把list中的元素連起來,變成一個字符串兒。跟split全反

s='a... adbDEF'
print(s.strip()) #默認去掉字符串倆邊的空格和換行符
new_s = s.strip('.')#加了點,就字符串最倆邊的點兒也可以去掉
print(new_s)
print(s.rstrip())#去右邊的
print(s.lstrip())#去左邊的
print(s.count('.'))#某個字符串出現的次數
print(s.index('a'))#找某個字符串下標,不存在會報錯
print(s.find('c'))#找某個字符串下標,不存在會返回-1
print(s.replace('adb','ABC',1))#替換,數字代表幾個
print(s.upper())#變成大寫
print(s.lower())#變成小寫
print(s.capitalize())#首字母大寫
print(s.startswith('p'))#判斷是不是以p開頭的
print(s.endswith('p'))#判斷是不是以p結尾的
print(s.islower())#判斷是否小寫
print(s.isupper())#判斷是否大寫
print(s.istitle())#判斷是不是標題(首字母是不是大寫)
print(s.isdigit())#判斷是不是整數
print(s.center(50,'*'))#放在50個字符中間,字符不夠,用*來湊
s2='abc123'
print(s2.isalpha())#判斷是不是全字母或漢字,不能有數字
print(s.isspace())#判斷是否全部都是空格
print(s.isalnum())#沒有特殊字符,返回True
print(s.isidentifier())#判斷是不是一個合法變量名

#用.format來格式化字符串。用{}來占位,不用一一對應
#目標:輸出字符串 insert into user VALUE (username,password,addr,email,phone)

 

#第一種格式化字符串
s='insert into user VALUE ({username},{password},' \
'{addr},{email},{phone}); '
new_s = s.format(addr='北京',phone=1223,email='niu@qq.com',username='niuhanyang',password='12345')
print(new_s)

#第二種格式化字符串
s='insert into user VALUE ({username},{password},' \
'{addr},{email},{phone}); '
d = {'addr': '北京', 'username': 'xiaohei', 'password': '12345', 'email': 12,
"phone": 'sdfs'}
s_map=s.format_map(d)
print(s_map)


l = [1,2,3,4,5,6,7,8,9,10]
for i in l:
res='0'+str(i)
print(res)

t='user1,user2,user3, user4,user5,user6,user7'
print('傳分隔符',t.split(','))#按照某個字符來分割字符串兒
print('什么都不傳',t.split())#什么都不傳,按空格分開。沒有空格就認為是一個元素

cars = ['ad','cd','ef']
print('、'.join(cars))#以某個字符把list中的元素連起來,變成一個字符串兒。跟split全反
print(str(cars))#看着沒有區別,但已經變成了字符串

replace strip join split isdigit upper lower format startswith endswith count
這幾個必須記住,很常用



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM