盤點(diǎn)一個列表中字符串替換的基礎(chǔ)題目
回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書
大家好,我是Python進(jìn)階者。
一、前言
前幾天在Python最強(qiáng)王者交流群【Chloe】問了一道Python基礎(chǔ)的問題,如下圖所示。

原始數(shù)據(jù)如下所示:
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
說白了,就是字符串替換。
二、實(shí)現(xiàn)過程
方法一
這里【瑜亮老師】給了一個方法,代碼如下所示:
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
temp = '----'.join(lst)
for i in char_lst:
temp = temp.replace(i, '')
res = temp.split('----')
res = list({i.strip() for i in res})
print(res)
一個replace搞定,結(jié)果如下圖所示:
方法二
這里【杰】給了一個稍微復(fù)雜的代碼,如下所示:
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
flag = 0
set_1 = set()
for ls in lst:
for ch in char_lst:
if ls.endswith(ch):
set_1.add(ls.rstrip(ch).strip())
flag = 1
if flag == 0:
set_1.add(ls)
else:
flag = 0
new_lis = list(set_1)
print(new_lis)
運(yùn)行結(jié)果如下所示:

也是可以滿足要求的。
方法三
這里【flag != flag】給了一個正則表達(dá)式的方法,代碼如下所示:
import re
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
s = ''.join(lst+char_lst)
dct = {i: 1 for i in re.compile(r'([A-Z][a-z]+)').findall(s)}
lis = list(dct.keys())
print(lis)
運(yùn)行結(jié)果如下所示:

方法四
這里【瑜亮老師】又給了一個集合方法,代碼如下所示:
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
res1 = {i for i in lst if char_lst[0] not in i and char_lst[1] not in i and char_lst[2] not in i}
res2 = {i.strip(j).strip() for i in lst for j in char_lst if j in i}
res1.update(res2)
res = list(res1)
print(res)
運(yùn)行結(jié)果如下所示:

方法五
這里【瑜亮老師】基于【flag != flag】大佬的代碼,略作修改,字典推導(dǎo)式改成集合推導(dǎo)式,又給了一個方法,代碼如下所示:
import re
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
s = ''.join(lst+char_lst)
st = {i for i in re.compile(r'([A-Z][a-z]+)').findall(s)}
lis = list(st)
print(lis)
運(yùn)行結(jié)果如下所示:

方法六
這里【瑜亮老師】基于嵌套for循環(huán)+break版,又給了一個方法,代碼如下所示:
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
st = []
for i in lst[:]:
for j in char_lst:
if ' ' in i:
st.append(i[:i.find(' ')])
break
elif j in i:
st.append(i[:i.find(j)])
break
else:
st.append(i)
break
res = list(set(st))
print(res)
運(yùn)行結(jié)果如下所示:

方法七
這里【flag != flag】又給了一個方法,代碼如下所示:
lst = ['Redcolor', 'Orange#', 'Green', 'Orange@', "White"]
char_lst = ['#', 'color', '@']
for i in char_lst:
for index, item in enumerate(lst):
if i in item:
new_item = item.replace(i, '').strip()
lst[index] = new_item
if lst.count(new_item) > 1:
del lst[lst.index(new_item)]
print(lst)
結(jié)果如下圖所示:
后來【瑜亮老師】針對這個代碼,稍微優(yōu)化了下,代碼如下所示:
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
for i in char_lst:
for index, item in enumerate(lst):
if i in item:
new_item = item.replace(i, '').strip()
if new_item not in lst:
lst[index] = new_item
else:
del lst[lst.index(item)]
print(lst)
結(jié)果如下圖所示:

方法很多,有的方法可能直接跳出了題意之外,硬生生的給解決了,不過問題不大!

如果有遇到問題,隨時聯(lián)系我解決,歡迎加入我的Python學(xué)習(xí)交流群。
三、總結(jié)
大家好,我是Python進(jìn)階者。這篇文章主要盤點(diǎn)了一道Python列表中字符串替換的問題,文中針對該問題給出了具體的解析和代碼實(shí)現(xiàn),幫助粉絲順利解決了問題。
最后感謝粉絲【Chloe】提問,感謝【瑜亮老師】、【杰】、【flag != flag】給出的思路和代碼解析,感謝【dcpeng】、【此類生物】等人參與學(xué)習(xí)交流。
小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
------------------- End -------------------
往期精彩文章推薦:
在xpath匹配li標(biāo)簽的時候跳過第一個li標(biāo)簽,匹配剩下的li標(biāo)簽表達(dá)式怎么寫?
盤點(diǎn)兩種使用Python網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)東方財富網(wǎng)分時數(shù)據(jù)抓取方法

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群】
萬水千山總是情,點(diǎn)個【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
