回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>这是我的输入和输出示例:</p>
<pre><code>l = [
['random_str0', 'random_str', 'random_str'],
['random_str1', '', 'random_str'],
['random_str2', '', ''],
['random_str3', 'random_str', 'random_str'],
['random_str4', '', ''],
['random_str5', '', ''],
['random_str6', 'random_str', ''],
['random_str7', 'random_str', 'random_str'],
['random_str8', '', ''],
['random_str9', '', ''],
['random_str10', '', ''],
['random_str11', '', ''],
]
out = [ # something like this. data structure and type and order are not important
['random_str0', 'random_str', 'random_str'],
[
['random_str1', '', 'random_str']
['random_str2', '', '']
],
[
['random_str3', 'random_str', 'random_str'],
['random_str4', '', ''],
['random_str5', '', '']
],
['random_str6', 'random_str', ''],
[
['random_str7', 'random_str', 'random_str'],
['random_str8', '', ''],
['random_str9', '', ''],
['random_str10', '', ''],
['random_str11', '', '']
]
]
</code></pre>
<p>如果任何内部列表具有索引1或索引2值,则后跟一个或多个缺少索引1和索引2值的列表,则形成一个组。(我的实际代码更复杂,也有其他条件,但为了简洁起见,省略了它,因为它不是实际问题的一部分。你知道吗</p>
<p>我就是这样试的。你知道吗</p>
<pre><code>for n in reversed(range(1, 5)):
for i in range(len(l)-n):
group = [l[i+j] for j in range(n+1)]
if (
(group[0][1] or group[0][2]) and
all([not (g[1] and g[2]) for g in group[1:]])
):
print(group)
Out: # not desired as it is overlapping.
[
['random_str7', 'random_str', 'random_str'],
['random_str8', '', ''],
['random_str9', '', ''],
['random_str10', '', ''],
['random_str11', '', '']
]
[
['random_str7', 'random_str', 'random_str'],
['random_str8', '', ''],
['random_str9', '', ''],
['random_str10', '', '']
]
[
['random_str3', 'random_str', 'random_str'],
['random_str4', '', ''],
['random_str5', '', '']
]
[
['random_str7', 'random_str', 'random_str'],
['random_str8', '', ''],
['random_str9', '', '']
]
[
['random_str1', 'random_str', 'random_str'],
['random_str2', '', '']
]
[
['random_str3', 'random_str', 'random_str'],
['random_str4', '', '']
]
[
['random_str7', 'random_str', 'random_str'],
['random_str8', '', '']
]
</code></pre>
<p><strong>问题是</strong>如何跟踪记录,使分组不重叠。我认为递归循环会有所帮助,但我不知道如何做到这一点。你知道吗</p>
<p>最终的数据结构不需要是一个列表。我用dicts试过了,但是代码变得更复杂了。你知道吗</p>
<p><strong>为了进一步说明,我创建了一步一步的pastebin</strong>
<a href="https://pastebin.com/qeWbxheK" rel="nofollow noreferrer">https://pastebin.com/qeWbxheK</a></p>