¿Cómo construir un conjunto de elementos de la lista en Python?


170

Tengo uno listde los nombres de archivo en python y me gustaría construir uno setde todos los nombres de archivo.

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

Parece que esto no funciona. ¿Cómo puede hacer esto?

Respuestas:


322

Si tiene una lista de objetos hashaable (los nombres de archivo probablemente serían cadenas, por lo que deberían contar):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]

Puedes construir el conjunto directamente:

s = set(lst)

De hecho, ¡ setfuncionará de esta manera con cualquier objeto iterable! (¿No es genial escribir pato?)


Si quieres hacerlo de forma iterativa:

s = set()
for item in iterable:
    s.add(item)

Pero rara vez es necesario hacerlo de esta manera. Solo lo menciono porque el set.addmétodo es bastante útil.


1
Estoy usando 2.7 y esto no parece funcionar. ¿Que está pasando aqui? Python 2.7.13 (predeterminado, 24 de julio de 2017, 14:22:59) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] en darwin Escriba "ayuda", "copyright", "créditos" o "licencia" para más información. >>> x = [1,2,3] >>> conjunto (x) conjunto ([1, 2, 3]) >>>
opus111

@ user1902291-- Parece que funcionó, solo tienes que seguir el conjunto resultante: y = set(x)
mgilson

También tenga en cuenta que agregar elementos en el conjunto de una lista puede resultar muy útil cuando desea filtrar duplicados de la lista.
Pranjal Kumar

12

La solución más directa es esta:

 s = set(filelist)

El problema en su código original es que los valores no se estaban asignando al conjunto . Aquí está la versión arreglada de su código:

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

9

Tu puedes hacer

my_set = set(my_list)

o, para Python 3,

my_set = {*my_list}

para crear un conjunto de una lista. Por el contrario, también puedes hacer

my_list = list(my_set)

o, para Python 3,

my_list = [*my_set]

para crear una lista a partir de un conjunto.

Solo tenga en cuenta que el orden de los elementos en una lista generalmente se pierde al convertir la lista en un conjunto, ya que un conjunto está inherentemente desordenado. (Sin embargo, una excepción en CPython parece ser si la lista consta solo de enteros no negativos, pero supongo que esto es una consecuencia de la implementación de conjuntos en CPython y que este comportamiento puede variar entre diferentes implementaciones de Python).


4

Aquí hay otra solución:

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

En este código, he utilizado el método set para convertirlo en un conjunto y luego eliminó todos los valores duplicados de la lista


1

Una forma general de construir un conjunto de forma iterativa como esta:

aset = {e for e in alist}

0

Simplemente ponga la línea:

new_list = set(your_list)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.