2013-06-12 5 views
5

Ich habe eine Formatzeichenfolge, die ich dynamisch basierend auf Benutzereingaben erstelle. Ich sammle die Argumente für die Formatzeichenfolge in einer Liste, und ich würde gerne wissen, wie man sie am Ende der Formatzeichenfolge entpackt. Ich habe einige Fragen gesehen, die damit zusammenhängen, aber ich bin sehr neu in Python und ich kann ihre Lösungen nicht auf meinen Fall anwenden.Python Entpacke Argumentliste für Format String

Die Idee, was ich tun möchte ist:

my_string = "string contents" % tuple([for item in var_array]) 

Natürlich ist dies nicht gültige Syntax ist aber hoffentlich beschreibt es das, was ich zu tun versucht: Ich möchte als auszupacken var_array Meine Liste von Argumenten, ohne vorher die Länge von var_array zu kennen. Wie könnte ich das tun?

Bearbeiten: Ich werde versuchen, mein Problem besser zu erklären. Ich erstelle eine Format-Zeichenkette, indem ich eine unbekannte Anzahl von Formatzeichenfolgen verkette. Daher hat meine letzte Zeichenfolge eine variable Anzahl von% s und daher eine variable Anzahl von Argumenten, die in einer Liste gesammelt werden.

Zum Beispiel:

"My format string might have %s or %s arguments" %([arg_list]) //here arg_list has 2 arguments 

"But my format string might also have %s or %s or %s arguments. %([arg_list]) //here arg_list has 3 arguments 

Die Länge des Formatstrings, und die Anzahl der Argumente sind variabel, basierend auf Benutzereingaben, damit ich am Ende in der Lage sein wollen, der auf einer Liste von Argumenten, tack letzte Zeichenfolge. Ist das möglich?

+0

Entschuldigung, verstehe nicht. Können Sie einige Vorher-Nachher-Beispiele bereitstellen? –

+0

Ich versuchte zu klären ... – jac300

Antwort

5

Hier ist ein Ansatz, der von Argumenten zu einem formatierten String geht (Überprüfung Fehler weiterhin erforderlich):

>>> def StartDance(*args): 
     return "%d, %d, %d, %d!" % tuple(args) 

>>> StartDance(5, 6, 7, 8) 
'5, 6, 7, 8!' 

Hier eine robustere Lösung für die Fehlerprüfung, aber ich präsentiere es als eine separate Antwort in Anbetracht dessen, wie viel zusätzliche Komplexität es hinzufügt:

>>> def StartDance(*args): 
     return (", ".join(["%d"] * len(args))+"!") % tuple(args) 
>>> StartDance(5, 6, 7, 8) 
'5, 6, 7, 8!' 
>>> StartDance(5, 6, 7, 8, 9, 10) 
'5, 6, 7, 8, 9, 10!' 
>>> StartDance(1) 
'1!' 

Und hier ist eine Funktion, um eine Liste der Rückkehr, die als Argumente ausgepackt wird nur diese Argumente als Liste behandelt zu haben (Python Spaß :)

>>> StartDance(*range(5,9)) 
'5, 6, 7, 8!' 
+0

ah, das ist wahrscheinlich, was das OP wollte. +1 –

+0

ah ok ...Ich sehe jetzt, wie das zutrifft. Ich habe falsch darüber nachgedacht. Vielen Dank. – jac300

+0

ok aber was ist, wenn ich eine Liste an die Funktion übergeben möchte, ist das möglich? Wie wenn ich das tue: StartDance (* range (len (my_array))) ... das die Indizes des Arrays zurückgibt, aber könnte ich ein Array so übergeben, dass es seinen verbundenen Inhalt zurückspuckt? – jac300

3

Sie ganz in der Nähe ist, versuchen Sie so etwas wie diese: "%s my %s is %s" % tuple(["Hi", "name", "butch"])

+1

_without die Länge von var_array vor der Zeit wissen – zondo

2

Unter der Annahme, was Sie wollen, in einen String machen unterstützt die str builtin können Sie tun:

def join_args(*args): 
    return " ".join([str(x) for x in args]) 

print(join_args(1,2,3,4,5,6)) 
print(join_args('1','2','3','4')) 

Out:

1 2 3 4 5 6 
1 2 3 4 

Sie auch die folgenden für eine flexiblere Zeichenfolge verwenden:

def join_args(fmstr, *args): 
    return fmstr.format(*args) 

print(join_args("One: {} Two: {} Three: {} Four: {}", 1,2,3,4)) 

Out:

One: 1 Two: 2 Three: 3 Four: 4 

So stellen Sie sicher, dass eine gleiche Anzahl von args und {} sind.