【问题标题】:Generate list from master list with matching words, irrespective of the sequence从具有匹配单词的主列表生成列表,无论顺序如何
【发布时间】:2019-05-31 16:28:01
【问题描述】:

我已经创建了一个列表,我们称之为主列表

master=['abc 1.2 px', 'pqr 5.4 tr', '1.8 cmq', 'pst 2.5']

现在我有另一个类似的列表

l1=['1.2 abc px', 'pqr tr 5.4', 'cmq 1.8', '1.8 cmq', '2.5 pst', 'abc 1.2 px']

我想修改 l1 ,它将从 master 中获取所有单词的名称,而不管顺序如何。例如,修改后的列表将是

l2=['abc 1.2 px', 'pqr 5.4 tr', '1.8 cmq', '1.8 cmq', 'pst 2.5','abc 1.2 px']

如何使用python做到这一点?

【问题讨论】:

  • 您认为会有多少种独特的组合?速度很重要吗?
  • @DanielScott 号码可以是任何数字,速度不是主要问题

标签: python regex python-3.x string pandas


【解决方案1】:

考虑创建一个“规范化”字典,其中值是来自master 的单词,键是它们的唯一表示,例如子单词的排序元组。如果一个词中的所有子词总是不同的,则可以使用frozenset

def normalize(word):
    return tuple(sorted(word.split()))
    # return frozenset(word.split())

normalized = {normalize(m) : m for m in master}
#{('1.2', 'abc', 'px'): 'abc 1.2 px', 
# ('5.4', 'pqr', 'tr'): 'pqr 5.4 tr', 
# ('1.8', 'cmq'): '1.8 cmq', ('2.5', 'pst'): 'pst 2.5'}

您现在可以将l1 中的每个单词转换为规范化形式并在字典中查找:

[normalized.get(normalize(m), m) for m in l1]
#['abc 1.2 px', 'pqr 5.4 tr', '1.8 cmq', '1.8 cmq', 'pst 2.5', 'abc 1.2 px']

请注意,如果某个单词不在master 中,则可以方便地保持不变。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多