У меня есть list
имен файлов в python, и я бы хотел построить set
из всех имен файлов.
filelist=[]
for filename in filelist:
set(filename)
Это не работает. Как это можно сделать?
У меня есть list
имен файлов в python, и я бы хотел построить set
из всех имен файлов.
filelist=[]
for filename in filelist:
set(filename)
Это не работает. Как это можно сделать?
Если у вас есть список хешируемых объектов (имена файлов, вероятно, будут строками, поэтому их следует учитывать):
lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]
вы можете напрямую построить набор:
s = set(lst)
Фактически, set
будет работать таким образом с любым итерируемым объектом! (Является ли утка не типичной?)
Если вы хотите сделать это итеративно:
s = set()
for item in iterable:
s.add(item)
Но редко приходится так поступать. Я упоминаю это только потому, что метод set.add
весьма полезен.
Наиболее прямым решением является следующее:
s = set(filelist)
Проблема в исходном коде состоит в том, что значения не были присвоены набору. Вот исправленная версия вашего кода:
s = set()
for filename in filelist:
s.add(filename)
print(s)
Вы можете сделать
my_set = set(my_list)
или, для Python 3,
my_set = {*my_list}
чтобы создать набор из списка. И наоборот, вы также можете сделать
my_list = list(my_set)
или, для Python 3,
my_list = [*my_set]
чтобы создать список из набора.
Просто обратите внимание, что порядок элементов в списке обычно теряется при преобразовании списка в набор, поскольку набор по сути неупорядочен. (Одно из исключений в CPython, похоже, состоит в том, что список состоит только из целых неотрицательных чисел, но я предполагаю, что это является следствием реализации наборов в CPython и что это поведение может различаться между различными реализациями Python.)
Вот еще одно решение:
>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])
В этом коде я использовал метод set, чтобы превратить его в набор, а затем удалил все повторяющиеся значения из списка
Проще говоря строку:
new_list = set(your_list)
Один общий способ построения множества итеративным способом, подобным следующему:
aset = {e for e in alist}