Python基礎(chǔ)——以練為習(xí)(字符串河哑,列表,字典龟虎,元組璃谨,集合)

話不多說,直接開始鲤妥,先看如下題干:


已知字符串 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))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仅淑,隨后出現(xiàn)的幾起案子称勋,更是在濱河造成了極大的恐慌,老刑警劉巖涯竟,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赡鲜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡昆禽,警方通過查閱死者的電腦和手機(jī)蝗蛙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醉鳖,“玉大人捡硅,你說我怎么就攤上這事〉量茫” “怎么了壮韭?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纹因。 經(jīng)常有香客問我喷屋,道長(zhǎng),這世上最難降的妖魔是什么瞭恰? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任屯曹,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恶耽。我一直安慰自己密任,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布偷俭。 她就那樣靜靜地躺著浪讳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涌萤。 梳的紋絲不亂的頭發(fā)上淹遵,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音负溪,去河邊找鬼透揣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛笙以,可吹牛的內(nèi)容都是我干的淌实。 我是一名探鬼主播冻辩,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猖腕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了恨闪?” 一聲冷哼從身側(cè)響起倘感,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咙咽,沒想到半個(gè)月后老玛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钧敞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蜡豹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溉苛。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡镜廉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愚战,到底是詐尸還是另有隱情娇唯,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布寂玲,位于F島的核電站塔插,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拓哟。R本人自食惡果不足惜想许,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧流纹,春花似錦谎砾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至碉哑,卻和暖如春挚币,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扣典。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工妆毕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贮尖。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓笛粘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親湿硝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薪前,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容