想象你有一个人。他的全名是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
该代码始终以给定的名字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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。