У меня есть список с дорожками, которые используют «/» в качестве разделителя, например:Как найти общий путь списка путей?
aaa/bbb/ccc/ddd
aaa/bbb/ccceee
aaa/bbb/ccc/fff
Как я могу написать функцию в Python, что бы вернуть строку «ааа/В /»?
У меня есть список с дорожками, которые используют «/» в качестве разделителя, например:Как найти общий путь списка путей?
aaa/bbb/ccc/ddd
aaa/bbb/ccceee
aaa/bbb/ccc/fff
Как я могу написать функцию в Python, что бы вернуть строку «ааа/В /»?
Я совершенно новый для питона (начали вчера), но это то, что я придумал:
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
Newline разделенного вход, как вы писали:
paths = """
aaa/bbb/ccc/ddd
aaa/bbb/ccceee
aaa/bbb/ccc/fff
"""
загадочное, Hacky сочетание списка понимания, zip()
, set()
и join()
Вы пробовали что-нибудь? – haifzhan
@HaifengZhang Мне все равно, что он пытался. Мне все равно, что у него была проблема, и кто-то решил свою проблему (и мою). Однако это немного сложнее, если учитывать кросс-платформенные требования. В python3.5 существует os.path.commonpath (_not_ commonprefix, который обманчив в поведении). Я закончил тем, что портировал общий путь с 3.5 –