海量新知
5 9 1 5 1 5 8

盘点一个列表中字符串替换的基础题目

财经快报 | 2022/08/26 16:55:14

一、前言

前几天在Python最强王者交流群【Chloe】问了一道

Python

基础的问题,如下图所示。

原始数据如下所示:

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 = 0set_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 = 0new_lis = list(set_1)print(new_lis)

运行结果如下所示:

也是可以满足要求的。

方法三

这里【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)

运行结果如下所示:

方法四

这里【瑜亮老师】又给了一个集合方法,代码如下所示:

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)

运行结果如下所示:

方法五

这里【瑜亮老师】基于【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)

运行结果如下所示:

方法六

这里【瑜亮老师】基于嵌套

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)            breakres = list(set(st))print(res)

运行结果如下所示:

方法七

这里【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)

结果如下图所示:

方法很多,有的方法可能直接跳出了题意之外,硬生生的给解决了,不过问题不大!

更多相关内容

更多相关内容

猿巴巴_商业服务平台精选

更多精选内容