簡體   English   中英

尋找所有潛在最長序列的pythonic方法

[英]pythonic way to find all potential longest sequence

因此,我有一個類似以下的列表

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中幾乎有某些功能可以執行此操作,但似乎無法弄清楚。

選項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

from collections import OrderedDict

o = OrderedDict()    
for x in data:
    o.setdefault(x.split('::')[0], []).append(x)

r = [sorted(o[k], key=len)[-1] for k in o]

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

並不是完全一樣,但是pythonic畢竟是主觀的。

您可以利用條件進行簡單的列表理解:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM