擅长:python、mysql、java
<p>我的方法是先将列表中的元素压缩为元组,如下所示:</p>
<pre><code>[('null', 0), ('null', 0), ('null', 0), ('entrya', 5), ('entryb', 10), ('anotherentry', 7), ...]
</code></pre>
<p>之后,可以按第二个元素对元素进行排序。你知道吗</p>
<pre><code>ls = [0, 0, 0, 0, 0, 'entrya', 5, 'entryb', 10, 'anotherentry', 7,
'entry', 1, 'entryd', 30, 0, 0, 0, 0, 0, 0]
ls_zip_elem = []
for x1, x2 in zip(ls, ls[1:]):
if x1 == 0:
ls_zip_elem.append(('null', x1))
elif not str(x1).isdigit():
ls_zip_elem.append((x1, x2))
else:
pass
ls_zip_elem_sorted = sorted(ls_zip_elem, key=lambda x: x[1]) # sorted
# put the list back
ls_sorted = []
for x1, x2 in ls_zip_elem_sorted:
if x1 == 'null':
ls_sorted.append(x2)
else:
ls_sorted.extend([x1, x2])
# output
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'entry', 1, 'entrya', 5, 'anotherentry', 7,
# 'entryb', 10, 'entryd', 30]
</code></pre>