I have a list of filenames in python and I would want to construct a set out of all the filenames.
filelist=[] for filename in filelist: set(filename) This does not seem to work. How can do this?
8 Answers
If you have a list of hashable objects (filenames would probably be strings, so they should count):
lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis] you can construct the set directly:
s = set(lst) In fact, set will work this way with any iterable object! (Isn't duck typing great?)
If you want to do it iteratively:
s = set() for item in iterable: s.add(item) But there's rarely a need to do it this way. I only mention it because the set.add method is quite useful.
The most direct solution is this:
s = set(filelist) The issue in your original code is that the values weren't being assigned to the set. Here's the fixed-up version of your code:
s = set() for filename in filelist: s.add(filename) print(s) You can do
my_set = set(my_list) or, in Python 3,
my_set = {*my_list} to create a set from a list. Conversely, you can also do
my_list = list(my_set) or, in Python 3,
my_list = [*my_set] to create a list from a set.
Just note that the order of the elements in a list is generally lost when converting the list to a set since a set is inherently unordered. (One exception in CPython, though, seems to be if the list consists only of non-negative integers, but I assume this is a consequence of the implementation of sets in CPython and that this behavior can vary between different Python implementations.)
Here is another solution:
>>>list1=["C:\\","D:\\","E:\\","C:\\"] >>>set1=set(list1) >>>set1 set(['E:\\', 'D:\\', 'C:\\']) In this code I have used the set method in order to turn it into a set and then it removed all duplicate values from the list
Simply put the line:
new_list = set(your_list) One general way to construct set in iterative way like this:
aset = {e for e in alist} You can also use list comprehension to create set.
s = {i for i in range(5)} All the above answers are correct but if you want to preserve the order of your list you'll need to proceed as follow
list(dict.fromkeys(your_list))