How can I convert a set to a list in Python? Using

a = set(["Blah", "Hello"]) a = list(a) 

doesn't work. It gives me:

TypeError: 'set' object is not callable 
10

7 Answers

Your code does work (tested with cpython 2.4, 2.5, 2.6, 2.7, 3.1 and 3.2):

>>> a = set(["Blah", "Hello"]) >>> a = list(a) # You probably wrote a = list(a()) here or list = set() above >>> a ['Blah', 'Hello'] 

Check that you didn't overwrite list by accident:

>>> assert list == __builtins__.list 
5

You've shadowed the builtin set by accidentally using it as a variable name, here is a simple way to replicate your error

>>> set=set() >>> set=set() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'set' object is not callable 

The first line rebinds set to an instance of set. The second line is trying to call the instance which of course fails.

Here is a less confusing version using different names for each variable. Using a fresh interpreter

>>> a=set() >>> b=a() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'set' object is not callable 

Hopefully it is obvious that calling a is an error

0

before you write set(XXXXX) you have used "set" as a variable e.g.

set = 90 #you have used "set" as an object … … a = set(["Blah", "Hello"]) a = list(a) 

This will work:

>>> t = [1,1,2,2,3,3,4,5] >>> print list(set(t)) [1,2,3,4,5] 

However, if you have used "list" or "set" as a variable name you will get the:

TypeError: 'set' object is not callable 

eg:

>>> set = [1,1,2,2,3,3,4,5] >>> print list(set(set)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'list' object is not callable 

Same error will occur if you have used "list" as a variable name.

s = set([1,2,3]) print [ x for x in iter(s) ] 

Your code works with Python 3.2.1 on Win7 x64

a = set(["Blah", "Hello"]) a = list(a) type(a) <class 'list'> 

Try using combination of map and lambda functions:

aList = map( lambda x: x, set ([1, 2, 6, 9, 0]) ) 

It is very convenient approach if you have a set of numbers in string and you want to convert it to list of integers:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) ) 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy