web-dev-qa-db-fra.com

Quel est le meilleur moyen de créer un tableau de chaînes en python?

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.

33
if_zero_equals_one

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)]
56
Steve Prentice

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.

20
Doug Swain

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.

6
Alex R

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)]
1
Artsiom Rudzenka

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']
1
Gerrat

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.

1
Lov Verma

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).

0
Shuo Yang
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

0
angela

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.

0
pillmuncher