J'ai une chaîne "42 0"
(par exemple) et j'ai besoin d'obtenir un tableau des deux entiers. Puis-je faire un .split
sur un espace?
6 réponses ne suffisent pas pour une question à laquelle OP aurait facilement pu répondre lui-même en testant dans le interprète :
>>> "42 0".split() # or .split(" ")
['42', '0']
A: oui.
Mais il n'a pas été spécifiquement indiqué que la méthode split
se divise par défaut en espaces (espace, tabulation, retour chariotet _ nouvelle ligne ) si vous ne fournissez aucun argument à cela.
>>> " \r 42\n\r \t\n \r0\n\r\n".split()
['42', '0']
De plus, utiliser map
est généralement plus propre que d'utiliser des interprétations de liste lorsque vous souhaitez convertir les éléments d'itérables en éléments intégrés tels que int
, float
, str
, etc. En Python 2:
>>> map(int, "42 0".split())
[42, 0]
Dans Python 3, map
renverra un objet paresseux, vous pourrez le récupérer dans une liste avec list()
ou l'utiliser tel quel dans une boucle for
, par exemple:
>>> map(int, "42 0".split())
<map object at 0x7f92e07f8940>
>>> list(map(int, "42 0".split()))
[42, 0]
text = "42 0"
nums = [int(n) for n in text.split()]
l = (int(x) for x in s.split())
Si vous êtes sûr qu'il y a toujours deux entiers, vous pouvez également le faire:
a,b = (int(x) for x in s.split())
ou si vous envisagez de modifier le tableau après
l = [int(x) for x in s.split()]
Cela devrait fonctionner:
[ int(x) for x in "40 1".split(" ") ]
Bien sûr, vous pouvez appeler split
, mais cela retournera des chaînes, pas des entiers. Faire
>>> x, y = "42 0".split()
>>> [int(x), int(y)]
[42, 0]
ou
[int(x) for x in "42 0".split()]
D'autres réponses montrent déjà que vous pouvez utiliser split () pour obtenir les valeurs dans une list . Si vous posiez des questions sur les arrays de Python, voici une solution:
import array
s = '42 0'
a = array.array('i')
for n in s.split():
a.append(int(n))
Edit: Une solution plus concise:
import array
s = '42 0'
a = array.array('i', (int(t) for t in s.split()))
Je suggère de vérifier si la sous-chaîne est un chiffre:
In [1]: [int(i) for i in '1 2 3a'.split() if i.isdigit()]
Out[1]: [1, 2]
Voici ma réponse pour Python 3.
some_string = "2 3 8 61 "
list(map(int, some_string.strip().split()))
Étant donné: text = "42 0"
import re
numlist = re.findall('\d+',text)
print(numlist)
['42', '0']