回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有两个Python列表:</p>
<pre><code>list_a = [[['Ab'], ['Qr', 'Zr']], [['Gt', 'Mh', 'Nt'], ['Dv', 'Cb']]]
list_b = [['Ab', 'QrB', 'Zr'], ['GtB', 'MhB', 'Nt6B', 'DvB', 'Cb6B5']]
</code></pre>
<p>我需要基于<code>list_a</code>取消<code>list_b</code>的展平。我需要:</p>
^{pr2}$
<p>有没有办法得到这个<code>list_c</code>?在</p>
<p><strong>其他信息:</strong>
列表的定义应确保:</p>
<ul>
<li>来自<code>list_a</code>的部分字符串将始终位于<code>list_b</code>中。例如,对于一个列表中的<code>Gt</code>,第二个列表中将有<code>Gt</code>或{<cd8>}。在</li>
<li>每个列表中的条目不能以不同的顺序排列-即,如果在一个列表中<code>Qr</code>在<code>Zr</code>之前,那么它(<code>Qr</code>或{<cd12>})必须在第二个列表中的<code>Zr</code>之前。在</li>
<li>每个列表最多可以包含20个字符串。在</li>
<li>每个列表只有唯一的字符串。。例如,<code>Gt</code>在任何列表中不能出现2次或更多次。在</li>
</ul>
<p><strong>尝试:</strong></p>
<p>以下是我尝试过的:</p>
<pre><code>list_c = [[],[]]
for ty,iten in enumerate(list_b):
for q in iten:
for l_e in list_a:
for items in l_e:
for t,qr in enumerate(items):
if qr in q:
list_c[ty].<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>([q])
</code></pre>
<p>其输出为:</p>
<pre><code>[[['Ab'], ['QrB'], ['Zr']], [['GtB'], ['MhB'], ['Nt6B'], ['DbB'], ['Cb6B5']]]
</code></pre>
<p>问题是<code>['QrB'], ['Zr']</code>应该组合成{<cd16>},就像它们在{<cd2>中组合一样。在</p>
<p><strong>尝试2:</strong></p>
<pre><code>for ty,iten in enumerate(list_b):
for q in iten:
for l_e,m in enumerate(list_a):
for ss,items in enumerate(m):
for t,qr in enumerate(items):
if qr in q:
list_a[l_e][ss][t] = q
</code></pre>
<p>这样可以工作并产生所需的输出:</p>
<pre><code>[[['Ab'], ['QrB', 'Zr']], [['GtB', 'MhB', 'Nt6B'], ['DvB', 'Cb6B5']]]
</code></pre>
<p>但是,它(尝试2)太长了,我想知道:在Python中,这似乎不是正确的方法。有没有一种更像Python的方法?在</p>