2012-07-15 20 views
14

En Python 2.6.5, dada esta lista mylist = [20, 30, 25, 20]¿Por qué no funciona esto la comprensión?

¿Por qué esta comprensión de conjunto no funciona?

>>> {x for x in mylist if mylist.count(x) >= 2} 
    File "<stdin>", line 1 
    {x for x in mylist if mylist.count(x) >= 2} 
     ^
SyntaxError: invalid syntax 

Gracias.

+1

Obras para mí con v2.7.2, consigo 'set ([20]) ' – Levon

+1

¿Qué" no funciona "al respecto? – kindall

+1

http://docs.python.org/dev/whatsnew/2.7.html#python-3-1-features – jdi

Respuesta

26
$ python2.6 
>>> mylist = [20, 30, 25, 20] 
>>> {x for x in mylist if mylist.count(x) >= 2} 
    File "<stdin>", line 1 
    {x for x in mylist if mylist.count(x) >= 2} 
     ^
SyntaxError: invalid syntax 

$ python2.7 
>>> mylist = [20, 30, 25, 20] 
>>> {x for x in mylist if mylist.count(x) >= 2} 
set([20]) 

Puede lograr los resultados en python2.6 utilizando una explícita set, y una generator:

>>> set(x for x in mylist if mylist.count(x) >= 2) 
set([20]) 
+2

También nuevo en 2.7: El conjunto literal ('{1, 2, 3, 4, 5} == conjunto ([1, 2, 3, 4, 5])') –

8

¿Qué versión de Python estás usando? Establecer comprensiones appeared in 2.7.x+ and 3.x+. Si está utilizando una versión anterior, obtendrá un SyntaxError: invalid syntax:

>>> {x for x in mylist if mylist.count(x) >= 2} 
    File "<stdin>", line 1 
    {x for x in mylist if mylist.count(x) >= 2} 
     ^
SyntaxError: invalid syntax 

Ese no es el caso de Python 2.7.x +/+ 3.x:

>>> {x for x in mylist if mylist.count(x) >= 2} 
set([20]) 
Cuestiones relacionadas