2011-06-10 24 views
12

Supongamos que quiero una lista de tuplas. Aquí está mi primera idea:¿Cómo pasar tuple como argumento en Python?

li = [] 
li.append(3, 'three') 

que se traduce en:

Traceback (most recent call last): 
    File "./foo.py", line 12, in <module> 
    li.append('three', 3) 
TypeError: append() takes exactly one argument (2 given) 

Así que recurren a:

li = [] 
item = 3, 'three' 
li.append(item) 

que funciona, pero parece demasiado prolijo. ¿Hay una mejor manera?

+0

Espero que el siguiente enlace le traiga algo de luz sobre cómo trabajar con tuplas: http://www.tutorialspoint.com/python/python_tuples.htm –

+0

@Artsiom Rudzenka - Ese tutorial es peligroso :(No solo tiene errores como mezclar listas y tuplas, sino que muestra cosas tontas como terminar líneas con ';' por alguna razón. – viraptor

+1

@viraptor Sí, tienes razón, siempre es mejor utilizar el tutorial oficial de Python: http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences –

Respuesta

33

añadir más paréntesis:

li.append((3, 'three')) 

paréntesis con una coma crear una tupla, a menos que sea una lista de argumentos.

Eso significa:

() # this is a 0-length tuple 
(1,) # this is a tuple containing "1" 
1, # this is a tuple containing "1" 
(1) # this is number one - it's exactly the same as: 
1  # also number one 
(1,2) # tuple with 2 elements 
1,2 # tuple with 2 elements 

Un efecto similar ocurre con 0 de longitud tupla:

type() # <- missing argument 
type(()) # returns <type 'tuple'> 
6

Es porque eso es no una tupla, se trata de dos argumentos del método add. Si quieres darle una argumento de que es una tupla, el argumento en sí tiene que ser (3, 'three'):

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 

>>> li = [] 

>>> li.append(3, 'three') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: append() takes exactly one argument (2 given) 

>>> li.append((3,'three')) 

>>> li 
[(3, 'three')] 

>>> 
3

Los paréntesis se utilizan para definir una tupla son opcionales en el retorno y declaraciones ASIGNACIÓN. es decir:

foo = 3, 1 
# equivalent to 
foo = (3, 1) 

def bar(): 
    return 3, 1 
# equivalent to 
def bar(): 
    return (3, 1) 

first, second = bar() 
# equivalent to 
(first, second) = bar() 

en llamada de función, tiene que definir explícitamente la tupla:

def baz(myTuple): 
    first, second = myTuple 
    return first 

baz((3, 1)) 
+2

Esto me ayudó. También descubrí que puede descomprimir antes, por ejemplo, 'def baz ((primero, segundo)):' – djeikyb

+0

Solo si está atascado en Python 2. Consulte http://stackoverflow.com/questions/20035591/python-cant-define- tuplas en una función – Dave

0

arroja que el error debido list.append sólo toma un argumento

compruebe esta lista + = ['x', 'y', 'z']

Cuestiones relacionadas