Je suis relativement nouveau en Python et ses bibliothèques et je me demandais comment créer un tableau de chaînes avec une taille prédéfinie. C'est facile en Java mais je me demandais comment je pourrais faire cela en python.
Jusqu'à présent, tout ce à quoi je peux penser est
strs = ['']*size
Et certains comment, quand j'essaye d'appeler des méthodes de chaîne dessus, le débogueur me donne une erreur. X opération n'existe pas dans l'objet Tuple.
Et si c'était en Java, c'est ce que je voudrais faire.
String[] ar = new String[size];
Arrays.fill(ar,"");
S'il vous plaît aider.
Code d'erreur
strs[sum-1] = strs[sum-1].strip('\(\)')
AttributeError: 'Tuple' object has no attribute 'strip'
Question : Comment pourrais-je faire ce que je peux normalement faire en Java en Python tout en maintenant le code propre.
En python, vous ne feriez normalement pas ce que vous essayez de faire. Mais, le code ci-dessous le fera:
strs = ["" for x in range(size)]
En Python, on a généralement tendance à utiliser une liste de taille non fixe (c'est-à-dire que les éléments peuvent être ajoutés/supprimés de manière dynamique). Si vous avez suivi cela, il ne serait pas nécessaire d'allouer à l'avance une collection de taille fixe et de la remplir avec des valeurs vides. Au lieu de créer ou de créer des chaînes, vous les ajoutez simplement à la liste. Lorsque vient le temps de supprimer des valeurs, vous supprimez simplement la valeur appropriée de la chaîne. J'imagine que vous pouvez probablement utiliser cette technique pour cela. Par exemple (dans la syntaxe Python 2.x):
>>> temp_list = []
>>> print temp_list
[]
>>>
>>> temp_list.append("one")
>>> temp_list.append("two")
>>> print temp_list
['one', 'two']
>>>
>>> temp_list.append("three")
>>> print temp_list
['one', 'two', 'three']
>>>
Bien sûr, certaines situations peuvent nécessiter quelque chose de plus spécifique. Dans votre cas, une bonne idée peut être d’utiliser un deque. Découvrez le message ici: Python, forçant une liste à une taille fixe . Avec cela, vous pouvez créer un deque qui a une taille fixe. Si une nouvelle valeur est ajoutée à la fin, le premier élément (tête du deque) est supprimé et le nouvel élément est ajouté au deque. Cela peut fonctionner pour ce dont vous avez besoin, mais je ne crois pas que cela soit considéré comme la "norme" pour Python.
La réponse simple est: "Vous ne faites pas." Au moment où vous avez besoin de quelque chose de longueur fixe, vous restez fidèle à de vieilles habitudes ou écrivez pour un problème très spécifique avec son propre ensemble de contraintes unique.
Mais quelle est la raison d'utiliser une taille fixe? Python n’a pas réellement besoin d’utiliser des tableaux de taille fixe (listes), vous avez donc toujours la possibilité d’augmenter sa taille à l’aide de l’ajout, de l’extension ou de la diminution avec pop ou au moins de la découpe.
x = ['' for x in xrange(10)]
Est-ce que vous essayez de faire quelque chose comme ça?
>>> strs = [s.strip('\(\)') for s in ['some\\', '(list)', 'of', 'strings']]
>>> strs
['some', 'list', 'of', 'strings']
La méthode la plus pratique et la plus pratique pour créer un tableau de chaînes en python consiste à utiliser la bibliothèque NumPy.
Exemple :
import numpy as np
arr = np.chararray((rows, columns))
Cela créera un tableau contenant toutes les entrées sous forme de chaînes vides. Vous pouvez ensuite initialiser le tableau en utilisant l'indexation ou le découpage en tranches.
Parfois, j'ai besoin d'un tableau de caractères vide. Vous ne pouvez pas faire "np.empty (taille)" car une erreur sera signalée si vous remplissez le caractère plus tard. Ensuite, je fais habituellement quelque chose d'assez maladroit mais c'est quand même une façon de le faire:
# Suppose you want a size N char array
charlist = [' ']*N # other preset character is fine as well, like 'x'
chararray = np.array(charlist)
# Then you change the content of the array
chararray[somecondition1] = 'a'
chararray[somecondition2] = 'b'
La mauvaise partie de ceci est que votre tableau a des valeurs par défaut (si vous oubliez de les changer).
def _remove_regex(input_text, regex_pattern):
findregs = re.finditer(regex_pattern, input_text)
for i in findregs:
input_text = re.sub(i.group().strip(), '', input_text)
return input_text
regex_pattern = r"\buntil\b|\bcan\b|\bboat\b"
_remove_regex("row and row and row your boat until you can row no more", regex_pattern)
\w
signifie qu'il correspond aux caractères du mot, a|b
correspond à l'un des a
ou b
, \b
représente une limite de mot
Le message d'erreur dit tout: strs[sum-1]
est un tuple, pas une chaîne. Si vous montrez plus de votre code, quelqu'un sera probablement en mesure de vous aider. Sans cela, nous ne pouvons que deviner.