使用另一个字符串列表对字符串列表进行排序

2024-10-01 22:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经搜索了stackoverflow,但找不到合适的解决方案, 我有两个列表list_Alist_Blist_A中的字符串长度不同,而list_B包含列表a中唯一的最后两个或三个字符

list_A = ['SedimentDB','SeedDB', 'FloorCD', 'QuanCD', 'DewDB', 'AsiaDMS', 'AfriDMS', 'EuroDMS'] 
List_B = ['DMS', 'CD', 'DB']

我想根据List_B的顺序对List_A进行排序

结果应该类似于

List_A = ['AsiaDMS', 'AfriDMS', 'EuroDMS', 'FloorCD', 'QuanCD', 'SedimentDB','SeedDB', 'DewDB']

谢谢


Tags: 字符串列表解决方案字符stackoverflowlistsedimentdbdewdb
3条回答

这是我能想到的最短(也是最简单)的解决方案-

list_A = ['SedimentDB','SeedDB', 'FloorCD', 'QuanCD', 'DewDB', 'AsiaDMS', 'AfriDMS', 'EuroDMS'] 
List_B = ['DMS', 'CD', 'DB']

new_list = [x for y in List_B for x in list_A if y in x]
print (new_list)

输出:

['AsiaDMS', 'AfriDMS', 'EuroDMS', 'FloorCD', 'QuanCD', 'SedimentDB', 'SeedDB', 'DewDB']
def sortKey(text):
    for i,b in enumerate(List_B):
        if text.endswith(b):
            return i
    return len(List_B)
list_A.sort(key=sortKey)
List_A = ['SedimentDB','SeedDB', 'FloorCD', 'QuanCD', 'DewDB', 'AsiaDMS',
          'AfriDMS', 'EuroDMS']
List_B = ['DMS', 'CD', 'DB']
new_lst = []

for j in List_B:
    for i in range(0,len(List_A)):
        len_i = len(List_A[i]) # length of each word in LIst A
        len_j = len(j) #  length of each word in LIst b
        if List_A[i][len_i-len_j:]  == j :
            new_lst.append(List_A[i])

print(new_lst)

相关问题 更多 >

    热门问题