回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>假设我有一个元组列表,如下所示:</p>
<pre><code>list_of_tuples = [('A', 'R'), ('B', 'R'), ('C', 'G'), ('D', 'G'), ('E', 'B'), ('D', 'B'), ('R', 'B'), ('F', 'R'), ('V', 'R'), ('A', 'G')]
</code></pre>
<p>每个元组中的第二个值总是<code>R</code>、<code>B</code>或<code>G</code>。我想创建一个函数<code>validate</code>,它检查是否可以使用每个元组第一个位置的字母构造某个单词,但前提是该元组的节位置的字母没有重复</p>
<p>例如,可以构造单词:</p>
<p>由于每个元组中的第二个值对应于不连续重复任何字母的<code>RGB</code>,因此<code>ACE</code>具有<code>(A, R)</code>、<code>(C, G)</code>和<code>(E, B)</code></p>
<p><code>ACED</code>与<code>(A, R), (C, G), (E, B), and ('D', 'B')</code>不可能,因为这将对应于<code>RGBB</code>,其中有一个连续的B</p>
<p>请注意,有时同一个字母的第二个位置可能有不同的字母,例如:</p>
<p><code>('A', 'R') and ('A', 'G')</code>。如果选择第一个元组而不是第二个元组,则只能拼写<code>ACE</code>,否则<code>G</code>会重复</p>
<p>还要注意,像<code>GBRBG</code>这样的组合是可能的,即使第二个位置字母“重复”它们不会连续重复</p>
<p>因此,我想要一个函数,可以通过以下方式验证单词:</p>
<p><code>def validate(submitted_word, list_of_tuples)</code></p>
<p>一种可能性是构造此集合可能的序列的每个可能组合,以及第二个序列中的字母将产生的相应序列,过滤掉有效单词,然后过滤掉具有连续字母重复的单词,但我担心,考虑到元组列表可能会变得如此之大,这将变得效率低下</p>