--- bench_rslow_3.log Slow +++ bench_rfast_3.log Fast (split, rfind, rindex, rpartition, rsplit) 2.7a1+ (trunk:76979M, Dec 21 2009, 21:14:57) [GCC 4.3.2] 2009-12-21 21:15:26.447861 string unicode (ms) (ms) % comment (...) ========== late match, 100 characters -14.90 17.42 85.6 s="ABC"*33; ((s+"D")*500+s+"E").find(s+"E") (*100) -10.25 10.30 99.5 s="ABC"*33; ((s+"D")*500+"E"+s).find("E"+s) (*100) -8.93 10.53 84.8 s="ABC"*33; (s+"E") in ((s+"D")*300+s+"E") (*100) -14.89 17.42 85.4 s="ABC"*33; ((s+"D")*500+s+"E").index(s+"E") (*100) -16.00 19.62 81.5 s="ABC"*33; ((s+"D")*500+s+"E").partition(s+"E") (*100) -32.85 15.75 208.6 s="ABC"*33; ("E"+s+("D"+s)*500).rfind("E"+s) (*100) -93.14 78.62 118.5 s="ABC"*33; (s+"E"+("D"+s)*500).rfind(s+"E") (*100) -32.84 15.67 209.6 s="ABC"*33; ("E"+s+("D"+s)*500).rindex("E"+s) (*100) -34.24 17.85 191.8 s="ABC"*33; ("E"+s+("D"+s)*500).rpartition("E"+s) (*100) -17.49 20.48 85.4 s="ABC"*33; ("E"+s+("D"+s)*500).rsplit("E"+s, 1) (*100) -23.53 30.26 77.8 s="ABC"*33; ((s+"D")*500+s+"E").split(s+"E", 1) (*100) +14.94 17.28 86.5 s="ABC"*33; ((s+"D")*500+s+"E").find(s+"E") (*100) +10.27 10.25 100.2 s="ABC"*33; ((s+"D")*500+"E"+s).find("E"+s) (*100) +8.92 10.41 85.7 s="ABC"*33; (s+"E") in ((s+"D")*300+s+"E") (*100) +14.90 17.29 86.2 s="ABC"*33; ((s+"D")*500+s+"E").index(s+"E") (*100) +16.01 19.50 82.1 s="ABC"*33; ((s+"D")*500+s+"E").partition(s+"E") (*100) +11.79 13.26 88.9 s="ABC"*33; ("E"+s+("D"+s)*500).rfind("E"+s) (*100) +8.78 9.42 93.2 s="ABC"*33; (s+"E"+("D"+s)*500).rfind(s+"E") (*100) +11.79 13.27 88.9 s="ABC"*33; ("E"+s+("D"+s)*500).rindex("E"+s) (*100) +13.17 15.47 85.1 s="ABC"*33; ("E"+s+("D"+s)*500).rpartition("E"+s) (*100) +13.32 20.45 65.1 s="ABC"*33; ("E"+s+("D"+s)*500).rsplit("E"+s, 1) (*100) +16.08 30.12 53.4 s="ABC"*33; ((s+"D")*500+s+"E").split(s+"E", 1) (*100) ========== late match, two characters -2.19 2.46 89.0 "BC" in ("AB"*300+"C") (*1000) -2.50 2.75 90.9 ("AB"*300+"C").find("BC") (*1000) -3.22 3.35 96.0 ("AB"*300+"CA").find("CA") (*1000) -2.52 2.75 91.6 ("AB"*300+"C").index("BC") (*1000) -2.85 3.14 90.8 ("AB"*300+"C").partition("BC") (*1000) -4.53 2.36 192.0 ("C"+"AB"*300).rfind("CA") (*1000) -4.96 4.43 111.9 ("BC"+"AB"*300).rfind("BC") (*1000) -4.40 2.37 185.9 ("C"+"AB"*300).rindex("CA") (*1000) -4.76 2.89 164.7 ("C"+"AB"*300).rpartition("CA") (*1000) -3.42 3.93 87.2 ("C"+"AB"*300).rsplit("CA", 1) (*1000) -4.34 5.32 81.5 ("AB"*300+"C").split("BC", 1) (*1000) +2.17 2.42 89.8 "BC" in ("AB"*300+"C") (*1000) +2.50 2.75 91.0 ("AB"*300+"C").find("BC") (*1000) +3.14 3.32 94.7 ("AB"*300+"CA").find("CA") (*1000) +2.50 2.75 91.1 ("AB"*300+"C").index("BC") (*1000) +2.83 3.18 89.0 ("AB"*300+"C").partition("BC") (*1000) +2.11 2.31 91.6 ("C"+"AB"*300).rfind("CA") (*1000) +2.66 2.85 93.5 ("BC"+"AB"*300).rfind("BC") (*1000) +2.11 2.32 91.0 ("C"+"AB"*300).rindex("CA") (*1000) +2.47 2.82 87.5 ("C"+"AB"*300).rpartition("CA") (*1000) +3.15 3.96 79.6 ("C"+"AB"*300).rsplit("CA", 1) (*1000) +3.50 5.33 65.7 ("AB"*300+"C").split("BC", 1) (*1000) ========== no match, single character -3.47 3.51 98.8 "B" in "A"*1000 (*1000) -3.76 3.78 99.5 ("A"*1000).find("B") (*1000) -3.65 3.63 100.5 ("A"*1000).partition("B") (*1000) -7.07 3.59 196.6 ("A"*1000).rfind("B") (*1000) -6.87 3.42 200.5 ("A"*1000).rpartition("B") (*1000) -3.64 4.41 82.5 ("A"*1000).rsplit("B", 1) (*1000) -3.89 4.61 84.4 ("A"*1000).split("B", 1) (*1000) +3.47 3.49 99.3 "B" in "A"*1000 (*1000) +3.77 3.79 99.4 ("A"*1000).find("B") (*1000) +3.61 3.63 99.7 ("A"*1000).partition("B") (*1000) +3.69 3.61 102.1 ("A"*1000).rfind("B") (*1000) +3.55 3.44 103.1 ("A"*1000).rpartition("B") (*1000) +3.63 4.38 82.9 ("A"*1000).rsplit("B", 1) (*1000) +3.87 4.61 83.9 ("A"*1000).split("B", 1) (*1000) ========== no match, two characters -6.69 7.53 88.9 "BC" in "AB"*1000 (*1000) -7.01 7.81 89.8 ("AB"*1000).find("BC") (*1000) -9.18 9.71 94.5 ("AB"*1000).find("CA") (*1000) -6.89 7.66 89.9 ("AB"*1000).partition("BC") (*1000) -15.38 13.56 113.4 ("AB"*1000).rfind("BC") (*1000) -13.56 6.70 202.3 ("AB"*1000).rfind("CA") (*1000) -15.23 13.70 111.2 ("AB"*1000).rpartition("BC") (*1000) -10.27 13.20 77.8 ("AB"*1000).rsplit("BC", 1) (*1000) -11.16 14.04 79.5 ("AB"*1000).split("BC", 1) (*1000) +6.70 7.51 89.2 "BC" in "AB"*1000 (*1000) +7.00 7.81 89.6 ("AB"*1000).find("BC") (*1000) +9.19 9.71 94.6 ("AB"*1000).find("CA") (*1000) +6.84 7.64 89.5 ("AB"*1000).partition("BC") (*1000) +7.67 8.26 92.8 ("AB"*1000).rfind("BC") (*1000) +5.80 6.47 89.7 ("AB"*1000).rfind("CA") (*1000) +7.51 8.10 92.7 ("AB"*1000).rpartition("BC") (*1000) +8.83 13.13 67.2 ("AB"*1000).rsplit("BC", 1) (*1000) +8.15 13.98 58.3 ("AB"*1000).split("BC", 1) (*1000) ========== split on multicharacter separator (dna) -7.38 9.04 81.6 dna.rsplit("ACTAT") (*10) -7.79 9.62 80.9 dna.split("ACTAT") (*10) +5.57 8.91 62.6 dna.rsplit("ACTAT") (*10) +6.65 9.39 70.9 dna.split("ACTAT") (*10) ========== split on multicharacter separator (small) -4.27 5.06 84.3 "this--is--a--test--of--the--emergency--broadcast--system".rsplit("--") (*1000) -4.22 4.96 85.0 "this--is--a--test--of--the--emergency--broadcast--system".split("--") (*1000) +4.29 4.92 87.2 "this--is--a--test--of--the--emergency--broadcast--system".rsplit("--") (*1000) +4.41 4.82 91.5 "this--is--a--test--of--the--emergency--broadcast--system".split("--") (*1000) ========== split whitespace (huge) -12.60 16.59 75.9 human_text.rsplit() (*10) -12.20 16.70 73.0 human_text.split() (*10) +12.37 16.48 75.1 human_text.rsplit() (*10) +12.01 16.63 72.3 human_text.split() (*10) ========== split whitespace (small) -3.91 3.30 118.5 ("Here are some words. "*2).rsplit() (*1000) -3.94 2.19 179.9 ("Here are some words. "*2).split() (*1000) +3.94 3.24 121.6 ("Here are some words. "*2).rsplit() (*1000) +3.92 2.20 178.2 ("Here are some words. "*2).split() (*1000) (...) -691.58 722.90 95.7 TOTAL +483.79 630.56 76.7 TOTAL