开发者社区> 问答> 正文

全名按逻辑顺序的唯一/有用组合

想象你有一个人。他的全名是Robert Jack Senior。我正在尝试使脚本仅按逻辑顺序使用其名称的有用组合进行搜索。

这意味着我将首先尝试搜索Robert Jack Senior,然后依次搜索Robert Senior,Robert Jack和Robert。我认为这是最合乎逻辑的顺序。如果您有其他疑问,请通知我!

到目前为止,我已经弄清楚了如何获得所有唯一的组合。但是,我认为该脚本将花费不必要的时间搜索所有组合,即使这种方法具有更高的准确性。

所以我的问题是:如何排除所有不必要的组合并按逻辑顺序排列,您是否同意删除组合?

我问这个的原因是,全名也可以只包含名字和姓氏。所以没有中间名。该代码必须与这些变体保持一致。不幸的是,我还没有想到一个解决方案。

我的代码:

from itertools import chain, combinations

fname = 'Robert Jack Senior'
fname = fname.split(' ')
all_subsets = list(chain(\*ap(lambda x: combinations(fname, x), range(1, len(fname) + 1))))
all_subsets = [' '.join(subset) for subset in all_subsets]
print(all_subsets)

输出:

['Robert', 'Jack', 'Senior', 'Robert Jack', 'Robert Senior', 'Jack Senior', 'Robert Jack Senior']

如前所述,期望的输出(再次,我认为)将是:

['Robert Jack Senior', 'Robert Senior', 'Robert Jack', 'Robert']

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 15:51:35 464 0
1 条回答
写回答
取消 提交回答
  • 该代码始终以给定的名字name_split [0]的顺序和组合为基础,在这种情况下为* Robert *。尝试这个:

    name = 'Robert Jack Senior' 
    
    def get_name_combinations(name):
        name_split = name.split()
        return [' '.join(name) for i in range(len(name_split) + 1) for name in combinations(name_split, i) if name and name[0] == name_split[0]][::-1]
    
    print(get_name_combinations(name))
    

    输出:

    ['Robert Jack Senior', 'Robert Senior', 'Robert Jack', 'Robert']
    

    回答来源:stackoverflow

    2020-03-24 15:51:43
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
继承与功能组合 立即下载
重新定义计算的边界 立即下载
用计算和数据去改变整个世界 立即下载