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 file
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)
One general way to construct set in iterative way like this:
aset = {e for e in alist}
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.
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)
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.)