<p>我得到了与@roganjosh相同的错误,所以我假设您的list-within-a-list应该包含字符串(如果不包含字符串,这是一个足够简单的更改)</p>
<p>您提供的代码的主要问题是,如果您曾经点击代码来检查前缀中是否有“b”,那么您永远不会查看是否已经将频道号添加到<code>new_list</code></p>
<p>我发现修改代码的最简单方法如下(虽然不太好,但我尽量保持代码不受影响):</p>
<p>首先,使用<code>channels[0].sort()</code>对列表中的列表进行排序</p>
<p>接下来,通过使用<code>channelNumbers = []</code>初始化列表来跟踪您已经添加的频道号</p>
<p>接下来,我拆分前缀,以便将频道号与频道版本分开:</p>
<p><code>channelNumber = prefix[:-1]
channelVersion = prefix[-1:]</code></p>
<p>最后,我调整了您的<code>elif</code>语句,以便它们仅在尚未添加频道号的情况下添加b或c版本:
<code>elif 'b' in prefix and not channelNumber in channelNumbers:</code>
和<code>elif 'c' in prefix and not channelNumber in channelNumbers:</code></p>
<p>所以完整的代码变成:</p>
<pre><code>channels = [['ch1a.twist', 'ch1b.twist', 'ch1c.twist', 'ch2a.bop', 'ch2b.bop', 'ch3c.pull']]
new_list = []
channelNumbers = []
channels[0].sort()
for list in channels:
for ch in list:
try:
prefix, suffix = ch.split('.')
channelNumber = prefix[:-1]
channelVersion = prefix[-1:]
except ValueError:
pass
else:
if channelVersion == 'a':
new_list.append(ch)
channelNumbers.append(channelNumber)
elif channelVersion == 'b' and not channelNumber in channelNumbers:
new_list.append(ch)
elif channelVersion == 'c' and not channelNumber in channelNumbers:
new_list.append(ch)
print(new_list)
</code></pre>
<p>正如您所要求的,输出是:<code>['ch1a.twist', 'ch2a.bop', 'ch3c.pull']</code></p>