获取不包含任何其他元素作为前缀的元素列表的最快方法(python)。在
(元素可以按任何顺序排列,为了解释清楚,元素在这里保持某种顺序,因此如果需要,必须显式地进行排序)
输入是
['AB', 'ABC', 'ABCDEF', 'ABCDEFG', 'BCD', 'DEF', 'DEFGHI', 'EF', 'GKL', 'JKLM']
消除的元素:
^{pr2}$
预期产量
['ABCDEFG', 'BCD', 'DEFGHI', 'EF', 'GKL', 'JKLM']
已编辑:
增加一点复杂性(或清晰度)。列表的平均长度在500到900之间。在
Tags:
ls.sort()
如果您的列表最初是无序的,请先。在使用
startswith
:{cd3>或^:
^{pr2}$与@sashkello的方法相比:
如果对列表进行排序,则每个元素要么是下一个元素的前缀,要么不是其中任何元素的前缀。因此,您可以写下:
这将是
n log(n)
排序加上一次遍历列表(n
)。在对于您当前的排序列表,它也稍微快一点,因为它是线性的,timeit给出了2.11我们。在
使用
^{pr2}$zip
可以稍微加快实现速度(但不是渐进的),而且更具python风格:时间是1.77美元
列表理解(
ls
是输入列表的名称):就性能而言,我怀疑它是最快的,但它的想法是非常直截了当的。您将逐个检查列表元素,并检查它是否是所有其余元素的列表中任何元素的前缀。在
timeit结果:每循环11.9 us(不过,如果要将其用于大列表,则缩放更重要)
相关问题 更多 >
编程相关推荐