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

2024-07-08 15:53:04 发布

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

我有两张单子。一个包含组件的名称,另一个将组件的名称及其描述作为字符串。我需要使用组件列表对描述列表进行排序,以便它们具有相同的顺序。你知道吗

components = ['R500','R501','C500','C501','C502','R500']
description =['R500 "RES 1k 1% 0603"','R500 "RES 1k 1% 0603"','R508 "RES 9k 1% 06013"','R501 "RES 10k 1% 0604"','C500 "1uF 10% 0805"','C501 10uF 10% 0806','C502 "1nF 10% 0807"']

R508应该被丢弃,因为它不在组件列表中。你知道吗

说明列表中的C501故意设置了不同的格式,因为格式并不总是相同的。你知道吗

我期望的结果是

description = [
'R500 "RES 1k 1% 0603"',
'R501 "RES 10k 1% 0604"',
'C500 "1uF 10% 0805"',
'C501 "10uF 10% 0806"',
'C502 "1nF 10% 0807"',
'R500 "RES 1k 1% 0603",]

Tags: 字符串名称列表排序格式组件resdescription
2条回答

您的示例数据包含一些值,这些值在组件中不以任何字符串开头,因此此实现只是将它们放在排序列表的开头。如果您想引发此条件的异常,可以使用代码的注释掉部分。你知道吗

def find_startswith_index(value, indexes=components):
    for i, component in enumerate(components):
        if value.startswith(component):
            return i
    return -1
    # raise IndexError(f'Sort key not found for value "{value}"')

sorted(description, key=find_startswith_index)
# ['R508 "RES 9k 1% 06013"', 'R500 "RES 1k 1% 0603"', 'R500 "RES 1k 1% 0603"', 'R501 "RES 10k 1% 0604"', 'C500 "1uF 10% 0805"', 'C501 "10uF 10% 0806"', 'C502 "1nF 10% 0807"']

您可以使用:

description.sort(key=lambda x:components.index(x.split(' "')[0]))

但这对当前示例不起作用,因为组件中没有R508。而且,R500出现两次,因此它使用第一次出现。你知道吗

我想你想要的其实是:

def findBySubstring(descriptions, sub):
    for d in descriptions:
        if sub in d:
            return d
    return "No description found"

result = [findBySubstring(descriptions, c) for c in components]

相关问题 更多 >

    热门问题