У мене є 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.)