У меня есть 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
метод весьма полезен.
y = set(x)
Наиболее прямым решением является следующее:
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.)