2017-09-01 6 views
0

I-Code geschrieben haben, wie folgt:Funktion, die mit variabler Länge als Argument verwendet und tuple

def convTup(*args): 
    t = set([]) 
    for i in args: 
     t.add(i) 
    return tuple(t) 

print convTup('a','b','c','d') 
print convTup(1,2,3,4,5,6) 
print convTup('a','b') 

Erwartete Ausgabe:

('a', 'b', 'c', 'd') 
(1, 2, 3, 4, 5, 6) 
('a', 'b') 

Aber ich habe Ausgabe wie folgt:

('a', 'c', 'b', 'd') 
(1, 2, 3, 4, 5, 6) 
('a', 'b') 

Warum wurde die Reihenfolge der Elemente nur für ('a','b','c','d') geändert? Wie kann ich das Tupel in der gleichen Reihenfolge wie die angegebene Eingabe drucken?

+0

1) Ihre Einrückung ist deaktiviert 2) Warum nicht einfach 'tuple (args) zurückgeben'? –

+0

@ JohnColeman Wenn Ihr Parameter eine Liste ist, würde Tuple (args) eine TypeError – Vinny

+0

korrigierte Einrückung und Rückkehr tuple (args) wird die erwartete Ausgabe geben. Aber ich möchte wissen, warum die Reihenfolge ändert sich nur für ('a', "b", "c", "d"). – RVR

Antwort

1

Sie können diese verwenden, und Sie werden ein Tupel Sequenz als Eingabe haben

>>> def f(*args): 
    p = [] 
    [p.append(x) for x in args if x not in p] 
    return tuple(p) 

>>> f(1, 1, 2, 3) 
(1, 2, 3) 
>>> f('a', 'b', 'c', 'd') 
('a', 'b', 'c', 'd') 

Diese Funktion wird eine Liste der einzigartigen Elemente erstellen und deren Reihenfolge verfolgen dann schicken Sie es als ein Tupel.

Sie können die gleiche Funktionalität mit einem Satz statt Liste sehen. Ein Set verfolgt nicht die Reihenfolge, in der die Elemente eingegeben wurden.

>>> def tup1(*args): 
    l = {x for x in args} 
    return tuple(l) 

>>> 
>>> tup1('a', 'b', 'c', 'd') 
('a', 'c', 'b', 'd') 

Sie können Ihre eigene SortedSet Sammlung implementieren, wenn Sie es an mehreren Stellen verwenden.

0

Dies sollte das tun, was Sie brauchen:

def convTup(*args): 
    return sorted(tuple(set(args)), key=lambda x: args.index(x)) 

Sou Sie args in set konvertieren, die standardmäßig bestellt wird, dann biegen Sie in die tuple und schließlich Art, dass tuple von der ursprünglichen Reihenfolge.

Also, um genau zu sein, sortiert diese Funktion nach der Reihenfolge ihres Auftretens, wobei nur das erste Auftreten des Elements in Argumenten berücksichtigt wird.

Verwandte Themen