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

Resuelto securecoding asked hace 11 años • 8 respuestas

Tengo listvarios nombres de archivos en Python y me gustaría construir uno seta partir de todos los nombres de archivos.

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

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

securecoding avatar Apr 02 '13 23:04 securecoding
Aceptado

Si tiene una lista de objetos hash (los nombres de archivos probablemente sean 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, set¡funcionará de esta manera con cualquier objeto iterable! (¿No es genial escribir con pato?)


Si quieres hacerlo iterativamente:

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

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

mgilson avatar Apr 02 '2013 16:04 mgilson

La solución más directa es esta:

s = set(filelist)

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

s = set()
for filename in filelist:
    s.add(filename)
print(s)
Raymond Hettinger avatar Apr 02 '2013 16:04 Raymond Hettinger

Tu puedes hacer

my_set = set(my_list)

o, en Python 3,

my_set = {*my_list}

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

my_list = list(my_set)

o, en Python 3,

my_list = [*my_set]

para crear una lista a partir de un conjunto.

Sólo tenga en cuenta que el orden de los elementos de 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 números 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).

HelloGoodbye avatar Nov 15 '2017 17:11 HelloGoodbye

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.

Adi Ml avatar Jan 26 '2017 11:01 Adi Ml

También puede utilizar la comprensión de listas para crear un conjunto.

s = {i for i in range(5)}
Si Thu avatar Jan 05 '2021 06:01 Si Thu