盘点一个列表中字符串替换的基础题目
共 6415字,需浏览 13分钟
· 2022-07-13
回复“书籍”即可获赠Python从入门到进阶共10本电子书
大家好,我是Python进阶者。
一、前言
前几天在Python最强王者交流群【Chloe】问了一道Python
基础的问题,如下图所示。
![](https://filescdn.proginn.com/452fc8d19ae258b2fedb2d2e4ce1b7a3/9700ee17c0e2472e24491f342f10e5c0.webp)
原始数据如下所示:
lst = ['Red color', 'Orange#', 'Green', 'Orange @', "White"]
char_lst = ['#', 'color', '@']
说白了,就是字符串替换。
二、实现过程
方法一
这里【瑜亮老师】给了一个方法,代码如下所示:
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
搞定,结果如下图所示:
方法二
这里【杰】给了一个稍微复杂的代码,如下所示:
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)
运行结果如下所示:
![](https://filescdn.proginn.com/e2a518fed8579c6dc6256faaa298bf9f/324d2e9eff8a4916e72659b218f0f2fe.webp)
也是可以满足要求的。
方法三
这里【flag != flag】给了一个正则表达式的方法,代码如下所示:
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)
运行结果如下所示:
![](https://filescdn.proginn.com/ca422069f0809fc885fffaac3d1188b8/cc1f0829bba69c263a00f669873e8484.webp)
方法四
这里【瑜亮老师】又给了一个集合方法,代码如下所示:
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)
运行结果如下所示:
![](https://filescdn.proginn.com/5ee33c8d56b463b24d18f094745e8ef8/45b4611c60ca93582a9b55cf40905a61.webp)
方法五
这里【瑜亮老师】基于【flag != flag】大佬的代码,略作修改,字典推导式改成集合推导式,又给了一个方法,代码如下所示:
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)
运行结果如下所示:
![](https://filescdn.proginn.com/65fa4b25f41f49571f5a85b93ffeb258/42c05a36e81a8c46656baa83d1016c64.webp)
方法六
这里【瑜亮老师】基于嵌套for
循环+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)
运行结果如下所示:
![](https://filescdn.proginn.com/cd32c443123b341e0ce56d2e5a1d4865/150789981ccb583afe813f6656ca4ec9.webp)
方法七
这里【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)
结果如下图所示:
后来【瑜亮老师】针对这个代码,稍微优化了下,代码如下所示:
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)
结果如下图所示:
![](https://filescdn.proginn.com/78b967a51791010714e6ddac6ee60cb6/69a01dc5d958bcf88f6ab08b337ed984.webp)
方法很多,有的方法可能直接跳出了题意之外,硬生生的给解决了,不过问题不大!
![](https://filescdn.proginn.com/a998ba0523cb355805f74bf28ecf7744/1e0b509b49a3740b9ca59df02a82bb99.webp)
如果有遇到问题,随时联系我解决,欢迎加入我的Python
学习交流群。
三、总结
大家好,我是Python进阶者。这篇文章主要盘点了一道Python
列表中字符串替换的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【Chloe】提问,感谢【瑜亮老师】、【杰】、【flag != flag】给出的思路和代码解析,感谢【dcpeng】、【此类生物】等人参与学习交流。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
------------------- End -------------------
往期精彩文章推荐:
![](https://filescdn.proginn.com/68b9b03060149ebfb6bf01a6fe1cf4e9/e0a2b1c2655e5c1d09b1e4a408a8ddf4.webp)
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~