הפונקציה split קיימת בהרבה שפות תכנות וברובן היחס לכפילויות זהה. הפונקציה מפצלת מחרוזת לפי תו הפרדה שתעבירו לה, ומחזירה רשימה של כל "החלקים" של המחרוזת. הנה דוגמת פייתון להמחשה:
>>> 'one two three'.split(' ')
['one', 'two', 'three']
מעניין לשים לב מה קורה כשתו ההפרדה מופיע יותר מפעם אחת ברצף:
>>> 'one two three'.split(' ')
['one', '', '', 'two', '', '', 'three']
ברגע ששמתי 3 רווחים בין המילים split זכרה לשקף לי את זה בצורה מעניינת: היא הוסיפה ברשימת התוצאות אלמנטים ריקים במספר של אחד פחות מספר התווים הכפולים. מה קורה פה? למה כשתו ההפרדה מופיע יותר מפעם אחת הוא צריך להוסיף אלמנטים ריקים לרשימה? ולמה כשמעבירים None בתור תו הפרדה כל זה לא קורה?
>>> 'one two three'.split(None)
['one', 'two', 'three']
>>> 'one two three'.split()
['one', 'two', 'three']
ההתנהגות מתבהרת כשאנחנו נזכרים בפונקציה join, שהיא ההיפך של split. פונקציית join של מחרוזת מקבלת רשימה ומדביקה אותה חזרה תוך שימוש במחרוזת המקורית כתו הפרדה:
>>> '-'.join(['yo', 'dog'])
'yo-dog'
בזכות התאים הריקים ברשימה ש split מחזירה, אנחנו יכולים להיות רגועים כשנפעיל join מחדש על אותה רשימה שחזרה מ split ולדעת שנקבל בדיוק את המחרוזת המקורית:
>>> text = 'split and join'
>>> ' '.join(text.split(' ')) == text
True