it-swarm.com.de

Was ist der beste Weg, um ein String-Array in Python zu erstellen?

Ich bin relativ neu in Python und seinen Bibliotheken. Ich habe mich gefragt, wie ich ein String-Array mit einer voreingestellten Größe erstellen könnte. In Java ist das einfach, aber ich habe mich gefragt, wie ich das in Python machen könnte. 

Bis jetzt kann ich nur daran denken 

strs = ['']*size

Und wenn ich versuche, String-Methoden darauf aufzurufen, gibt mir der Debugger einen Fehler. X -Operation existiert nicht im Objekt Tuple.

Und wenn es in Java wäre, würde ich das gerne tun.

String[] ar = new String[size];
Arrays.fill(ar,"");

Bitte helfen 

Fehlercode

    strs[sum-1] = strs[sum-1].strip('\(\)')
AttributeError: 'Tuple' object has no attribute 'strip'

Frage : Wie mache ich das, was ich normalerweise in Java in Python machen kann, während der Code trotzdem sauber bleibt.

33

In Python würden Sie normalerweise nicht das tun, was Sie versuchen. Der folgende Code wird es tun:

strs = ["" for x in range(size)]
56
Steve Prentice

In Python besteht die Tendenz normalerweise darin, dass eine Liste mit nicht festgelegter Größe verwendet wird (dh Elemente können dynamisch angehängt/entfernt werden). Wenn Sie dies befolgen, ist es nicht erforderlich, eine Sammlung mit fester Größe vorab zuzuordnen und mit leeren Werten zu füllen. Wenn Sie Zeichenfolgen abrufen oder erstellen, fügen Sie sie einfach der Liste hinzu. Beim Entfernen von Werten entfernen Sie einfach den entsprechenden Wert aus der Zeichenfolge. Ich könnte mir vorstellen, dass Sie diese Technik wahrscheinlich dafür verwenden können. Zum Beispiel (in der Python 2.x-Syntax):

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

Natürlich kann es in manchen Situationen etwas genaueres geben. In Ihrem Fall kann es eine gute Idee sein, eine Deque zu verwenden. Hier geht's zum Post: Python, zwingt eine Liste auf eine feste Größe . Damit können Sie einen Deque erstellen, der eine feste Größe hat. Wenn ein neuer Wert an das Ende angehängt wird, wird das erste Element (Kopf der Deque) entfernt und das neue Element an die Deque angehängt. Dies mag für das funktionieren, was Sie brauchen, aber ich glaube nicht, dass dies die "Norm" für Python ist.

20
Doug Swain

Die einfache Antwort lautet: "Sie tun es nicht." An dem Punkt, an dem Sie etwas mit fester Länge benötigen, halten Sie sich entweder an alte Gewohnheiten fest oder schreiben für ein ganz spezifisches Problem mit seinen eigenen einzigartigen Einschränkungen.

6
Alex R

Aber was ist ein Grund, eine feste Größe zu verwenden? Es gibt in Python keine Notwendigkeit, Arrays (Listen) mit fester Größe zu verwenden, sodass Sie immer die Möglichkeit haben, die Größe mithilfe von Anhängen zu vergrößern, mit Pop zu erweitern oder zu verringern.

x = [''  for x in xrange(10)]
1

Versuchen Sie so etwas zu tun?

>>> strs = [s.strip('\(\)') for s in ['some\\', '(list)', 'of', 'strings']]
>>> strs 
['some', 'list', 'of', 'strings']
1
Gerrat

Die beste und bequemste Methode zum Erstellen eines String-Arrays in Python ist die NumPy-Bibliothek.

Beispiel

import numpy as np
arr = np.chararray((rows, columns))

Dadurch wird ein Array erstellt, das alle Einträge als leere Zeichenfolgen enthält. Sie können das Array dann entweder durch Indizieren oder durch Slicing initialisieren.

1
Lov Verma

Manchmal brauche ich ein leeres Zeichenfeld. Sie können "np.empty (size)" nicht ausführen, da ein Fehler gemeldet wird, wenn Sie später Zeichen eingeben. Dann mache ich normalerweise etwas Unbeholfenes, aber es ist immer noch eine Möglichkeit:

# 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'

Der Nachteil ist, dass Ihr Array Standardwerte hat (wenn Sie vergessen, diese zu ändern).

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 bedeutet, dass es mit Word-Zeichen übereinstimmt, a|b bedeutet, dass entweder a oder b übereinstimmen, \b eine Wortgrenze darstellt

0
angela

Die Fehlermeldung besagt alles: strs[sum-1] ist ein Tuple, keine Zeichenfolge. Wenn Sie mehr Code anzeigen, kann Ihnen wahrscheinlich jemand helfen. Ohne das können wir nur raten.

0
pillmuncher