web-dev-qa-db-fra.com

Partition Python et split

Je veux diviser une chaîne avec deux mots tels que "Word1 Word2" en utilisant diviser et partitionner et imprimer (en utilisant un pour) les mots séparément comme:

Partition:
Word1
Word2

Split:
Word1
Word2

Ceci est mon 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(" ")

Cela se passe:

Separation with partition: 
('Word1', ' ', 'Word2')
('Word1', ' ', 'Word2')

Separation with split: 
['Word1', 'Word2']
['Word1', 'Word2']
9
Marcos Guimaraes

Une commande comme name.split() renvoie une liste. Vous pourriez envisager de parcourir cette liste:

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

Parce que la chose que vous avez écrite, à savoir

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

exécute la commande print name.split(" ") deux fois (une fois pour la valeur i=1 et une fois de plus pour i=2). Et deux fois, il affichera l'intégralité du résultat:

['Word1', 'Word2']
['Word1', 'Word2']

La même chose se passe avec partition - sauf qu'il renvoie également l'élément que vous avez scindé. Donc, dans ce cas, vous voudrez peut-être faire

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

renvoyer les éléments 0 et 2. Alternativement, vous pouvez faire

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

Imprimer les éléments 0 et 2 en deux passages consécutifs dans la boucle. Notez que ce dernier code est plus inefficace puisqu'il calcule la partition deux fois. Si vous vous en souciez, vous pouvez écrire

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

str.partition retourne un tuple de trois éléments. Chaîne avant la chaîne de partitionnement, la chaîne de partitionnement elle-même et le reste de la chaîne. Donc, il doit être utilisé comme ça

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

Pour utiliser le str.split , vous pouvez simplement imprimer les chaînes fractionnées comme ceci

print name.split(" ")

Mais, lorsque vous appelez cela comme ceci, si la chaîne a plus d'un espace, vous obtiendrez plus de deux éléments. Par exemple

name = "Word1 Word2 Word3"
print name.split(" ")          # ['Word1', 'Word2', 'Word3']

Si vous voulez diviser une seule fois, vous pouvez spécifier le nombre de fois à diviser comme deuxième paramètre, comme ceci

name = "Word1 Word2 Word3"
print name.split(" ", 1)       # ['Word1', 'Word2 Word3']

Toutefois, si vous essayez de vous scinder en fonction des espaces, vous n'avez pas à passer " ". Vous pouvez simplement faire

name = "Word1 Word2 Word3"
print name.split()            # ['Word1', 'Word2', 'Word3']

Si vous voulez limiter le nombre de divisions,

name = "Word1 Word2 Word3"
print name.split(None, 1)     # ['Word1', 'Word2 Word3']

Note: Utiliser None dans split ou ne spécifier aucun paramètre, c'est ce qui se passe

Citant à partir de split documentation

Si sep n'est pas spécifié ou est None, un algorithme de fractionnement différent est Appliqué: les espaces blancs consécutifs sont considérés comme un seul séparateur, et le résultat ne contiendra aucune chaîne vide au début ou fin si la chaîne a des espaces de début ou de fin. Par conséquent, fractionner une chaîne vide ou une chaîne constituée uniquement d'espaces avec un séparateur Aucun retourne [].

Donc, vous pouvez changer votre programme comme ça

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

Ou vous pouvez utiliser str.join comme ceci

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

print "Split:"
print "\n".join(name.split())
21
thefourtheye

La méthode partition () divise la chaîne à la première occurrence du séparateur et renvoie un tuple contenant la partie séparateur avant, le séparateur et la partie ultérieure.

string = "Deepak est une bonne personne et Preeti n'est pas une bonne personne." // 'is' un séparateur est trouvé à la première occurrence print (string.partition ('is')) 

Sortie:

('Deepak', 'est', 'une bonne personne et Preeti n'est pas une bonne personne')

Et en split, String = "Deepak est une bonne personne et Preeti n'est pas une bonne personne." // 'is' un séparateur est trouvé à chaque occurrence print (string.partition ('is')) 

Sortie:

('Deepak', 'est', 'une' bonne personne et Preeti ',' est ',' pas 'une bonne personne.')

En termes simples, split divisera la chaîne à n'importe quelle occurrence de l'argument donné, tandis que partition ne divisera la chaîne qu'à la première occurrence de l'argument donné et retournera un 3-Tuple avec l'argument donné comme valeur intermédiaire.

0
Preeti Duhan