寻找所有潜在最长序列的Python法

2024-10-01 04:55:03 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有一个清单如下

potential_labels = ['foo', 'foo::bar', 'foo::bar::baz', "abc", "abc::cde::def", "bleh"]

desired_output = ['foo::bar::baz', "abc::cde::def", "bleh"]

这是因为。。对于根“foo”,“foo::bar::baz”是最长的序列 对于“abc”,“abc::cde::def”,对于“bleh”,它是“bleh”

有没有python内置函数来完成这个。。我觉得在itertools中几乎有些东西可以做到这一点,但似乎无法解决这个问题。在


Tags: 函数outputlabelsfoodefbar序列baz
2条回答

您可以利用以下条件进行简单的列表理解:

>>> [label for label in potential_labels if "\0".join(potential_labels).count("\0{}".format(label))==1]
['foo::bar::baz', 'abc::cde::def', 'bleh']

选项1
max+groupby应该这样做。在

r = [max(g, key=len) for _, g in \
          itertools.groupby(data, key=lambda x: x.split('::')[0])]

r
['foo::bar::baz', 'abc::cde::def', 'bleh']

选项2
一个更简单的解决方案包括collections.OrderedDict

^{pr2}$

不完全是一条直线,但什么是Python毕竟是主观的。在

相关问题 更多 >