寻找像减法计数器这样的东西来获得差分的负键

2024-10-03 06:24:51 发布

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

我最近开始学习python,并试图优化一个拼字游戏解决程序来练习。我写了一个工作程序,但是在添加了考虑空白块的功能之后,我意识到我做错了,运行起来需要很长时间。我建立了一个巨大的列表,列出了可能的机架,然后针对每个可能的机架运行我的程序。现在,为了优化事情,我希望建立一个可用字母的列表,然后一旦我有了一个可能的单词列表,在机架上对它们进行评分(以考虑空白)。在

我以前做的是:

for item in word_list:
    for letter in item:
        if item.count(letter) > players_rack.count(letter):
            valid_words.append(item)

我想知道是否有一种方法可以使用Counter()简化这个过程 我想做的是,从Counter(letters_to_work_with)中减去Counter(word),如果有任何项是负数……这可能是Counter()不可能的,那么就说它不是一个有效的单词。在

有没有一种数据类型可以在这里更好地工作?还是有一种我看不到的方法?在

谢谢。在


Tags: 方法in程序功能列表forcountcounter
2条回答

你的问题对我来说不太清楚——至少发布一些输入和输出的示例可能会有所帮助(例如:“如果把这个和这个作为输入,我想把这个作为输出”)。在

确实可以从另一个中减去一个Counter,但这并不能产生预期的结果。现在您仍然可以为特定的键减去值,即

>>> c1 = Counter("word")
>>> c2 = Counter("oawrc")
>>> [(k, c2.get(k, 0) - v) for k, v in c1.items()]
[('r', 0), ('o', 0), ('w', 0), ('d', -1)]

在Python3.2及更高版本中,Counter有{a1},它完全符合您的需要,保留0和负值,而实际的-运算符则没有。它在适当的位置运行,所以你应该:

letter_counts = Counter(letters_to_work_with)
letter_counts.subtract(Counter(word))
# Alternatively, though it won't short-circuit, you could do:
# if min(letter_counts.values()) < 0:
if any(v < 0 for v in letter_counts.values()):
    ... not valid ...

相关问题 更多 >