<pre><code> for i in range(len(part)):
if check_id(part[i], ban_group[i]) is True:
candidates.append(part)
</code></pre>
<p>这将比较从<code>part</code>到<code>ban_group</code>对应的</em>元素的每个元素,以及匹配的<em>每个</em>元素的整个<code>part</code>到<code>candidates</code></p>
<p>您想要的(如果我理解正确的话)是对照整个</em><code>ban_group</code>检查来自<code>part</code>的每个元素,以查看是否有任何<code>ban_group</code>元素匹配。然后,您需要查看这些结果,并查看是否所有的<code>part</code>元素都匹配,并且可能对候选元素进行一次<code>append</code><em></p>
<p>使用<code>for</code>循环来完成这项工作可能会很棘手,而且简单的想法需要大量的代码。更好的方法是使用内置的<code>any</code>和<code>all</code>函数,这些函数可以传递给生成器表达式,以便轻松处理整个列表。然后,您可以使用函数来命名流程的每个步骤。对于整个循环,我们也可以使用列表理解,而不是<code>append</code>将每个结果添加到新列表中</p>
<pre><code>def is_banned(user, ban_group):
# use `any` to see if the user matches any of the ban patterns.
return any(check_id(user, ban) for ban in ban_group)
def all_banned(part, ban_group):
# use `all` to see if all of the users matched a ban pattern.
return all(is_banned(user, ban_group) for user in part)
def solution(user_group, ban_group):
# apply the `all_banned` logic to each combination of users of the
# specified size.
return [
part for part in combinations(user_group, len(ban_group))
if all_banned(part, ban_group)
]
</code></pre>
<p>我希望我正确理解了预期的逻辑。如果没有,那么应该很容易修复,使用类似的技术</p>