web-dev-qa-db-fra.com

Fractionner la corde en deux parties seulement

J'ai une ficelle

s = 'abcd qwrre qwedsasd zxcwsacds'

Je veux diviser une chaîne en seulement deux parties à la première occurrence d'un espace. i.e. a='abcd' Et b='qwrre qwedsasd zxcwsacds'

Si j'utilise a, b=split(' '), cela me donne une erreur car il y a trop de valeurs à décompresser.

22
Abhishek Velankar

Vous pouvez utiliser a,b = split(' ', 1).

Le deuxième argument 1 est le nombre maximal de scissions effectuées.

s = 'abcd efgh hijk'
a,b = s.split(' ', 1)
print(a) #abcd
print(b) #efgh hijk

Pour plus d'informations sur la fonction de division de chaîne, voir str.split dans le manuel .

21
TMK

De la documentation Python

str.split (sep = None, maxsplit = -1)

Renvoie une liste des mots de la chaîne, en utilisant sep comme chaîne de délimitation. Si maxsplit est donné, au maximum les scissions de maxsplit sont effectuées (ainsi, la liste aura au plus maxsplit + 1 éléments). Si maxsplit n'est pas spécifié ou -1, le nombre de divisions n'est pas limité (toutes les divisions possibles sont effectuées).

'1 2 3'.split(maxsplit=1)
# ['1', '2 3']
11
ajxs

Vous pouvez utiliser une méthode de chaîne standard partition qui recherche un séparateur donné et retourne un 3-Tuple composé d'une partie chaîne avant celle-ci, du séparateur lui-même et de la partie suivante.

>>> s = 'abcd qwrre qwedsasd zxcwsacds'
>>> s.partition(' ')
('abcd', ' ', 'qwrre qwedsasd zxcwsacds')
10
constt

Il vous manque un paramètre supplémentaire dans votre partage, le nombre d'occurrences, essayez ceci;

s='abcd qwrre qwedsasd zxcwsacds'
>>> a, b = s.split(' ', 1)
>>> print(a, b)
5
Zack Atama

Vous pouvez résoudre ce problème en utilisant python "expression en étoile".

s='abcd qwrre qwedsasd zxcwsacds'
a = s.split()
first, *second = a
second = " ".join(second)

"first" prend le premier élément de la liste et "* second" prend les éléments restants.

>>> first
'abcd'
>>> second
'qwrre', 'qwedsasd', 'zxcwsacds'
3
JJ123

Essaye ça:

s = 'abcd qwrre qwedsasd zxcwsacds'
s1 = s.split()[0]
s2 = ' '.join(s.split()[1:])
print(s1)
print(s2)

Sortie:

abcd
qwrre qwedsasd zxcwsacds

Ou:

new_s = ''.join([' s ' if i.isspace() else i for i in s])
a,b = new_s.replace(' s','',1).split(' s ')
print(a)
print(b)

Sortie:

abcd
qwrre qwedsasd zxcwsacds

Ou encore mieux diviser également pour les onglets et les nouvelles lignes:

a,b = s.split(None,1)
print(a)
print(b)

Sortie:

abcd
qwrre qwedsasd zxcwsacds
3
U10-Forward

1.Vous pouvez diviser la chaîne comme ceci.

a = temp.substring(0, s.indexOf(' '));
b = temp.substring(s.indexOf(' ') + 1);

2. ou vous pouvez faire:

a = s[0: s.find(' ')]
b = s[s.find(' ') + 1: ]

3.

a,b = s.split(' ', 1)
print(a)
print(b) 
2
Rajat Jain

Donc, il y a un deuxième paramètre que vous pouvez passer comme beaucoup l'ont souligné:

>>> a, b = "foo bar".split(' ', 1)

mais personne ne le fait remarquer:

>>> a, b = "foobar".split(' ', 1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

Vous ne voulez pas utiliser ceci parce que c'est dangereux, sauf si vous avez la garantie d'avoir une chaîne contenant un seul espace. Il est préférable de le scinder, puis de vérifier combien de scissions vous avez et de les décompresser:

>>> parts = "foo bar".split(' ', 1)
>>> if len(parts) == 2:
>>>    a, b = parts 
2
mroman
#!python2

s='abcd qwrre qwedsasd zxcwsacds'

s1 = s[0: s.find(' ')]
s2 = s[s.find(' ') + 1: ]

print s1
print s2
'''
abcd
qwrre qwedsasd zxcwsacds
'''
1
Michael Swartz