Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python partition and split

I want to split a string with two words like "word1 word2" using split and partition and print (using a for) the words separately like:

Partition:
word1
word2

Split:
word1
word2

This is my code:

print("Hello World")
name = raw_input("Type your name: ")

train = 1,2
train1 = 1,2
print("Separation with partition: ")
for i in train1:
    print name.partition(" ")

print("Separation with split: ")
for i in train1:
    print name.split(" ")

This is happening:

Separation with partition: 
('word1', ' ', 'word2')
('word1', ' ', 'word2')

Separation with split: 
['word1', 'word2']
['word1', 'word2']
like image 433
Marcos Guimaraes Avatar asked Feb 05 '14 03:02

Marcos Guimaraes


People also ask

What is the difference between the split and the partition function of Python?

The difference between split() and rsplit() is the use of the maxsplit argument. If the maxsplit argument is set, the rsplit() function splits a string from the right side (from the final character), whereas the split() method splits from the left side (from the first character).

What does partition () do in Python?

The partition() method searches for a specified string, and splits the string into a tuple containing three elements. The first element contains the part before the specified string. The second element contains the specified string. The third element contains the part after the string.

Can you split () by a newline Python?

split() method splits the string by new line character and returns a list of strings. The string can also contain \n characters in the string as shown below, instead of a multi-line string with triple quotes.

How do you split between in Python?

A Quick Guide to Using split() This function can be used to split strings between characters. The split() function takes two parameters. The first is called the separator and it determines which character is used to split the string. The split() function returns a list of substrings from the original string.


2 Answers

str.partition returns a tuple of three elements. String before the partitioning string, the partitioning string itself and the rest of the string. So, it has to be used like this

first, middle, rest = name.partition(" ")
print first, rest

To use the str.split, you can simply print the splitted strings like this

print name.split(" ")

But, when you call it like this, if the string has more than one space characters, you will get more than two elements. For example

name = "word1 word2 word3"
print name.split(" ")          # ['word1', 'word2', 'word3']

If you want to split only once, you can specify the number times to split as the second parameter, like this

name = "word1 word2 word3"
print name.split(" ", 1)       # ['word1', 'word2 word3']

But, if you are trying to split based on the whitespace characters, you don't have to pass " ". You can simply do

name = "word1 word2 word3"
print name.split()            # ['word1', 'word2', 'word3']

If you want to limit the number of splits,

name = "word1 word2 word3"
print name.split(None, 1)     # ['word1', 'word2 word3']

Note: Using None in split or specifying no parameters, this is what happens

Quoting from the split documentation

If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace. Consequently, splitting an empty string or a string consisting of just whitespace with a None separator returns [].

So, you can change your program like this

print "Partition:"
first, middle, rest = name.partition(" ")
for current_string in (first, rest):
    print current_string

print "Split:"
for current_string in name.split(" "):
    print current_string

Or you can use str.join method like this

print "Partition:"
first, middle, rest = name.partition(" ")
print "\n".join((first, rest))

print "Split:"
print "\n".join(name.split())
like image 73
thefourtheye Avatar answered Sep 20 '22 15:09

thefourtheye


A command like name.split() returns a list. You might consider iterating over that list:

for i in name.split(" "):
  print i

Because the thing you wrote, namely

for i in train:
  print name.split(" ")

will execute the command print name.split(" ") twice (once for value i=1, and once more for i=2). And twice it will print out the entire result:

['word1', 'word2']
['word1', 'word2']

A similar thing happens with partition - except it returns the element that you split as well. So in that case you might want to do

print name.partition(" ")[0:3:2]
# or
print name.partition(" ")[0::2]

to return elements 0 and 2. Alternatively, you can do

train = (0, 2,)
for i in train:
  print name.partition(" ")[i]

To print element 0 and 2 in two consecutive passes through the loop. Note that this latter code is more inefficient as it computes the partition twice. If you cared, you could write

train = (0,2,)
part = name.partition(" ")
for i in train:
  print part[i]
like image 44
Floris Avatar answered Sep 20 '22 15:09

Floris