話不多說,直接開始鲤妥,先看如下題干:
已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下
1 請(qǐng)將a字符串的大寫改為小寫佳吞,小寫改為大寫。
2 請(qǐng)將a字符串的數(shù)字取出棉安,并輸出成一個(gè)新的字符串底扳。
3 請(qǐng)統(tǒng)計(jì)a字符串出現(xiàn)的每個(gè)字母的出現(xiàn)次數(shù)(忽略大小寫,a與A是同一個(gè)字母)贡耽,并輸出成一個(gè)字典衷模。 例 {'a':4,'b':2}
4 請(qǐng)去除a字符串多次出現(xiàn)的字母,僅留最先出現(xiàn)的一個(gè)蒲赂。例'abcabb'阱冶,經(jīng)過去除后,輸出 'abc'
5 請(qǐng)將a字符串反轉(zhuǎn)并輸出滥嘴。例:'abc'的反轉(zhuǎn)是'cba'
6 去除a字符串內(nèi)的數(shù)字后木蹬,請(qǐng)將該字符串里的單詞重新排序(a-z),并且重新輸出一個(gè)排序后的字符串若皱。(保留大小寫,a與A的順序關(guān)系為:A在a前面镊叁。例:AaBb)
7 請(qǐng)判斷 'boy'里出現(xiàn)的每一個(gè)字母尘颓,是否都出現(xiàn)在a字符串里。如果出現(xiàn)晦譬,則輸出True疤苹,否則,則輸出False.
8 要求如1.7蛔添,此時(shí)的單詞判斷痰催,由'boy'改為四個(gè)兜辞,分別是 'boy','girl','bird','dirty'迎瞧,請(qǐng)判斷如上這4個(gè)字符串里的每個(gè)字母,是否都出現(xiàn)在a字符串里逸吵。
9 輸出a字符串出現(xiàn)頻率最高的字母凶硅。
10 要求所有的小寫字母在大寫字母前面,所有的字母在數(shù)字前面,所有的奇數(shù)在偶數(shù)前面。
這個(gè)練習(xí)共有十問扫皱,綜合了字符串string足绅,列表list,字典dict韩脑,元組tuple氢妈,集合set等基本數(shù)據(jù)類型,以及這些數(shù)據(jù)類型之間的轉(zhuǎn)化段多。下面開始逐一分析首量,逐一上代碼。
1. 大寫轉(zhuǎn)小寫进苍,小寫轉(zhuǎn)大寫加缘,直接用swapcase函數(shù)。
print(a.swapcase())
2. 判斷字符串中為數(shù)字的字符觉啊,放入列表中拣宏,用join函數(shù)將列表中的字符拼接成字符串。
print(''.join([s for s in a if s.isdigit()]))
3. 用count函數(shù)計(jì)算字符串中字符出現(xiàn)的次數(shù)杠人,將字符和出現(xiàn)的次數(shù)以元組的形式存入列表勋乾,最后轉(zhuǎn)化成字典。
print(dict([(x, a.count(x)) for x in set(a)]))
4. 分四步完成嗡善。
第一步:將字符串轉(zhuǎn)化成列表:
a_list = list(a)
第二步:將列表轉(zhuǎn)化成集合去重市俊,然后再轉(zhuǎn)化成列表:
set_list = list(set(a_list))
第三步:對(duì)去重過的列表進(jìn)行原先的排序:
set_list.sort(key=a_list.index)
第四步:將列表拼接成字符串:
print(''.join(set_list))
5. 有兩個(gè)方法可以實(shí)現(xiàn)反轉(zhuǎn)。
方法一:用reverse函數(shù)反轉(zhuǎn)
a_list = list(a)
a_list.reverse()
print(''.join(a_list))
方法二:使用步進(jìn)反轉(zhuǎn)
print(a[::-1])
6. 拆分成兩個(gè)任務(wù):
(1)小寫字母進(jìn)行a-z排序
(2)大寫字母插入到相同小寫字母之前
s_list = sorted(a)
#定義一個(gè)大寫字母的list
a_upper_list = []
#定義一個(gè)小寫字母的list
a_lower_list = []
for x in s_list:
if x.isupper():
a_upper_list.append(x)
elif x.islower():
a_lower_list.append(x)
else:
pass
for y in a_upper_list:
#大寫字母轉(zhuǎn)化成小寫字母進(jìn)行判斷
y_lower = y.lower()
if y_lower in a_lower_list:
# 將大寫字母插入到對(duì)應(yīng)的小寫字母所在的腳標(biāo)滤奈,小寫字母自動(dòng)后移
a_lower_list.insert(a_lower_list.index(y_lower), y)
print(''.join(a_lower_list))
7. 將字符串a(chǎn)和字符串“boy”都轉(zhuǎn)化成集合摆昧,比較字符串a(chǎn)轉(zhuǎn)化的集合與兩個(gè)集合合并后的集合所占總長(zhǎng)度,是否相等蜒程。
a_set = set(list(a))
boy_set = set(list('boy'))
#計(jì)算當(dāng)前a集合的長(zhǎng)度
x = len(a_set)
#將boy集合放入a集合
a_set.update(boy_set)
#再次計(jì)算更新后的a結(jié)合的長(zhǎng)度
y = len(a_set)
#判斷兩次計(jì)算的長(zhǎng)度是否相等绅你,相等輸出True伺帘,不相等輸出False
if x == y:
print("True")
else:
print("False")
8. 字符串“girl”“bird“”dirty”中都有字符串“ir”,可以先判斷“ir”忌锯,如果返回False伪嫁,就不用再判斷了,如果返回True偶垮,則需要對(duì)不含“ir”的字符串做進(jìn)一步判斷张咳。
為了方便,定義一個(gè)函數(shù):
def isAllContain(a, b):
a_set = set(list(a))
b_set = set(list(b))
x = len(a_set)
a_set.update(b_set)
y = len(a_set)
if x == y:
return True
else:
return False
調(diào)用上面的函數(shù):
print(isAllContain(a, "ir")) #True
print(isAllContain(a, "girl".replace("ir", ""))) #True
print(isAllContain(a, "bird".replace("ir", ""))) #True
print(isAllContain(a, "dirty".replace("ir", ""))) #False
9. 這一題與第三題類似似舵,不過這里呢脚猾,不用字典,用集合砚哗。
第一步:將字符和字符出現(xiàn)的次數(shù)龙助,組成元組放在列表里
a_set_list = ([(x, a.count(x)) for x in set(a)])
第二步:將列表根據(jù)元組第二項(xiàng)進(jìn)行由大到小的排序
a_set_list.sort(key=lambda k: k[1], reverse=True)
第三步:找到列表中第一個(gè)元組中的第一項(xiàng)
print(a_set_list[0][0])
10. 這一題雖然描述起來很復(fù)雜,但是可以一行代碼搞定蛛芥,自己體會(huì)吧提鸟。
"".join(sorted(a, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x))