<p>这里有一些修改。将<code>Team</code>转换为布尔值似乎没有意义,因此我不会定义<code>__bool__</code>,而是明确定义<code>is_cool</code>。你知道吗</p>
<p>另外,我想你应该检查一下是否没有大于1的差异。在这种情况下,您需要<code>all(v <= 1 for v in diff.values())</code>:</p>
<pre><code>class Team(object):
def __init__(self, names):
self.names = names
def is_cool(self):
from collections import Counter
first = Counter(map(lambda n: n[0].lower(), self.names))
last = Counter(map(lambda n: n[-1].lower(), self.names))
diff = last - first
return all(v <= 1 for v in diff.values())
print(Team(["Rob", "Bobby", "Billy"]).is_cool())
# False
print(Team(["Rob", "Nick", "Bobby", "Yann"]).is_cool())
# True
</code></pre>
<p>不过,逻辑上还有一个(大)问题:</p>
<pre><code>print(Team(["Ab", "cd", "ef"]).is_cool())
# True
</code></pre>
<p>我认为<code>Counter</code>不足以解决这个问题。您可能需要定义一个图,并查看是否有一条路径连接每个名称。<a href="https://networkx.github.io/" rel="nofollow noreferrer">NetworkX</a>可能会有帮助。你知道吗</p>
<p>下面是<a href="http://www.geeksforgeeks.org/given-array-strings-find-strings-can-chained-form-circle/" rel="nofollow noreferrer">related graph problem</a>的描述。你知道吗</p>