summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-12-01 15:25:19 (GMT)
committerGuido van Rossum <guido@python.org>1997-12-01 15:25:19 (GMT)
commit06ba34c5d47751f9a5ae8e16bf1a7cf12c871609 (patch)
tree6d67a46a3a02a63f41d4080eb84612cc5294ac4e
parent58a88b3e34f7b992a33ee93001bf6d795acd7f32 (diff)
downloadcpython-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.py10
-rw-r--r--Lib/stringold.py10
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