octopusgrabbus
octopusgrabbus

Reputation: 10685

Why doesn't this set comprehension work?

In Python 2.6.5, given this list mylist = [20, 30, 25, 20]

Why does this set comprehension not work?

>>> {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

Thank you.

Upvotes: 13

Views: 12348

Answers (2)

jdi
jdi

Reputation: 92559

$ 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])

You can accomplish the results in python2.6 using an explicit set, and a generator:

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

Upvotes: 27

&#211;scar L&#243;pez
&#211;scar L&#243;pez

Reputation: 235994

What version of Python are you using? Set comprehensions appeared in 2.7.x+ and 3.x+. If you're using an older version, you'll get a 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

That is not the case with Python 2.7.x+ / 3.x+ :

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

Upvotes: 8

Related Questions