2016-03-29 3 views
0

У меня есть список с дорожками, которые используют «/» в качестве разделителя, например:Как найти общий путь списка путей?

aaa/bbb/ccc/ddd 
aaa/bbb/ccceee 
aaa/bbb/ccc/fff 

Как я могу написать функцию в Python, что бы вернуть строку «ааа/В /»?

+0

Вы пробовали что-нибудь? – haifzhan

+0

@HaifengZhang Мне все равно, что он пытался. Мне все равно, что у него была проблема, и кто-то решил свою проблему (и мою). Однако это немного сложнее, если учитывать кросс-платформенные требования. В python3.5 существует os.path.commonpath (_not_ commonprefix, который обманчив в поведении). Я закончил тем, что портировал общий путь с 3.5 –

ответ

1

Я совершенно новый для питона (начали вчера), но это то, что я придумал:

paths = [ 'aaa/bbb/ccc/ddd/eee', 'aaa/bbb/ccceee/fff', 'aaa/bbb/ddd/eee', 'aaa/bbb/' ] 

def get_common_path(paths): 
    common = [] 
    common_size = -1 

    for p in paths: 
     s = p.split('/') 
     s.pop() 
     if common_size == -1: 
      common_size = len(s) 
      common = s 
      continue 
     while common_size > 0 and s[0:common_size] != common: 
      common_size -= 1 
      common.pop() 

    return '/'.join(common) + '/' 

common_path = get_common_path(paths) 
print 'Common path = \'{}\'; length = {}'.format(common_path, len(common_path)) 

, который выводит:

Common path = 'aaa/bbb/'; length = 8 
0

Newline разделенного вход, как вы писали:

paths = """ 
aaa/bbb/ccc/ddd 
aaa/bbb/ccceee 
aaa/bbb/ccc/fff 
""" 

загадочное, Hacky сочетание списка понимания, zip(), set() и join()

Смежные вопросы