给定一个单词和一个单词列表,我必须找到可以使用给定单词的字母(字母计数)构建的列表元素/单词。我试着用
Counter
集合中的对象和Python2.7的定义
cmp()
函数(我使用的是3.6.5)。
从那时起,我开始意识到这种方法对于这样一个问题来说似乎是不好的实践(之前,我试图使用计数器对象字典进行比较)。我的程序不起作用的原因是比较依赖于列表之间的“>”、“<”操作,这些操作根据词典顺序给出结果。(
referred from here
)所以即使“raven”可以由“ravenous”生成,下面的程序也会因为排序列表中字符的顺序而失败。
from collections import Counter
word = 'ravenous'
candidates = ["raven", "mealwheel", "rasputin"]
def count_fn(mystr):
return sorted(list(Counter(mystr).items()))
def compare_fn (c1,c2):
return ((c1>c2) - (c1<c2))
list_word = count_fn(word)
list_candidates = list(map(count_fn,candidates))
cmp_list = [compare_fn(list_word,i) for i in list_candidates]
cmp_list
#[-1, -1, -1] #should be [1,-1,-1]
那么,对于下面两个列表,我如何确认
list_candidates[0]
是
list_word
. 请注意比较
('a',1)
在里面
列表字
反对
(a),1)
在里面
list_candidates[i]
也可能是
('a',5)
在里面
列表字
反对
(a),1)
在里面
候选人名单
;两种情况都是真的。
print(list_word)
#[('a', 1), ('e', 1), ('n', 1), ('o', 1), ('r', 1), ('s', 1), ('u', 1), ('v', 1)]
print(list_candidates[0])
#[('a', 1), ('e', 1), ('n', 1), ('r', 1), ('v', 1)]