diff options
author | Guido van Rossum <guido@python.org> | 1997-12-01 15:25:19 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-12-01 15:25:19 (GMT) |
commit | 06ba34c5d47751f9a5ae8e16bf1a7cf12c871609 (patch) | |
tree | 6d67a46a3a02a63f41d4080eb84612cc5294ac4e | |
parent | 58a88b3e34f7b992a33ee93001bf6d795acd7f32 (diff) | |
download | cpython-06ba34c5d47751f9a5ae8e16bf1a7cf12c871609.zip cpython-06ba34c5d47751f9a5ae8e16bf1a7cf12c871609.tar.gz cpython-06ba34c5d47751f9a5ae8e16bf1a7cf12c871609.tar.bz2 |
In string.split(), honor maxsplit (if > 0).
In string.splitfields(), ignore maxsplit if <= 0, rather than ignoring
maxsplit=0 but effectively treating negative numbers the same as
maxsplit=1. Also made the test for maxsplit slightly more efficient
(set it to the length of the string when <= 0 so the test for its
presence can be omitted from the loop).
-rw-r--r-- | Lib/string.py | 10 | ||||
-rw-r--r-- | Lib/stringold.py | 10 |
2 files changed, 16 insertions, 4 deletions
diff --git a/Lib/string.py b/Lib/string.py index 3f65978..2139a75 100644 --- a/Lib/string.py +++ b/Lib/string.py @@ -74,11 +74,17 @@ def split(s, sep=None, maxsplit=0): if sep is not None: return splitfields(s, sep, maxsplit) res = [] i, n = 0, len(s) + if maxsplit <= 0: maxsplit = n + count = 0 while i < n: while i < n and s[i] in whitespace: i = i+1 if i == n: break + if count >= maxsplit: + res.append(s[i:]) + break j = i while j < n and s[j] not in whitespace: j = j+1 + count = count + 1 res.append(s[i:j]) i = j return res @@ -93,6 +99,7 @@ def splitfields(s, sep=None, maxsplit=0): if nsep == 0: return [s] ns = len(s) + if maxsplit <= 0: maxsplit = ns i = j = 0 count = 0 while j+nsep <= ns: @@ -100,8 +107,7 @@ def splitfields(s, sep=None, maxsplit=0): count = count + 1 res.append(s[i:j]) i = j = j + nsep - if (maxsplit and (count >= maxsplit)): - break + if count >= maxsplit: break else: j = j + 1 diff --git a/Lib/stringold.py b/Lib/stringold.py index 3f65978..2139a75 100644 --- a/Lib/stringold.py +++ b/Lib/stringold.py @@ -74,11 +74,17 @@ def split(s, sep=None, maxsplit=0): if sep is not None: return splitfields(s, sep, maxsplit) res = [] i, n = 0, len(s) + if maxsplit <= 0: maxsplit = n + count = 0 while i < n: while i < n and s[i] in whitespace: i = i+1 if i == n: break + if count >= maxsplit: + res.append(s[i:]) + break j = i while j < n and s[j] not in whitespace: j = j+1 + count = count + 1 res.append(s[i:j]) i = j return res @@ -93,6 +99,7 @@ def splitfields(s, sep=None, maxsplit=0): if nsep == 0: return [s] ns = len(s) + if maxsplit <= 0: maxsplit = ns i = j = 0 count = 0 while j+nsep <= ns: @@ -100,8 +107,7 @@ def splitfields(s, sep=None, maxsplit=0): count = count + 1 res.append(s[i:j]) i = j = j + nsep - if (maxsplit and (count >= maxsplit)): - break + if count >= maxsplit: break else: j = j + 1 |