summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2003-12-31 22:44:29 (GMT)
committerRaymond Hettinger <python@rcn.com>2003-12-31 22:44:29 (GMT)
commit74bb7f03b1ff097d2e08544539549ec7283ffc75 (patch)
treee45d0a594b7bba6e906da703a60c3d4cac9b9abc
parent9b4dab4da1b02d4e89c3882cd779516cada3644f (diff)
downloadcpython-74bb7f03b1ff097d2e08544539549ec7283ffc75.zip
cpython-74bb7f03b1ff097d2e08544539549ec7283ffc75.tar.gz
cpython-74bb7f03b1ff097d2e08544539549ec7283ffc75.tar.bz2
SF Patch 681780: Faster commonprefix (OS independent)
Improved based on discussions at: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/252177 http://groups.google.com/groups?th=fc7b54f11af6b24e&seekm=bss2so$om$00$1@news.t-online.com
-rw-r--r--Lib/posixpath.py17
1 files changed, 7 insertions, 10 deletions
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 7f907ef..7ee4911 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -123,16 +123,13 @@ def dirname(p):
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
- prefix = m[0]
- for item in m:
- for i in range(len(prefix)):
- if prefix[:i+1] != item[:i+1]:
- prefix = prefix[:i]
- if i == 0:
- return ''
- break
- return prefix
-
+ s1 = min(m)
+ s2 = max(m)
+ n = min(len(s1), len(s2))
+ for i in xrange(n):
+ if s1[i] != s2[i]:
+ return s1[:i]
+ return s1[:n]
# Get size, mtime, atime of files.