Как построить набор из элементов списка в python? - программирование
Подтвердить что ты не робот

Как построить набор из элементов списка в python?

У меня есть list имен файлов в python, и я бы хотел построить set из всех имен файлов.

filelist=[]
for filename in filelist:
    set(filename)

Это не работает. Как это можно сделать?

4b9b3361

Ответ 1

Если у вас есть список хешируемых объектов (имена файлов, вероятно, будут строками, поэтому их следует учитывать):

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 весьма полезен.

Ответ 2

Наиболее прямым решением является следующее:

 s = set(filelist)

Проблема в исходном коде состоит в том, что значения не были присвоены набору. Вот исправленная версия вашего кода:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)

Ответ 3

Вы можете сделать

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.)

Ответ 4

Вот еще одно решение:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])

В этом коде я использовал метод set, чтобы превратить его в набор, а затем удалил все повторяющиеся значения из списка

Ответ 5

Проще говоря строку:

new_list = set(your_list)

Ответ 6

Один общий способ построения множества итеративным способом, подобным следующему:

aset = {e for e in alist}