如何在python中构造一个列表项的集合?

我在python中有一个文件名的list,我想从所有的文件名中构造一个set

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

这似乎并不奏效。怎么做呢?

553297 次浏览

如果你有一个哈希对象列表(文件名可能是字符串,所以它们应该算数):

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

你可以直接构造集合:

s = set(lst)

事实上,set将以这种方式与任何可迭代对象!一起工作(duck键入不是很棒吗?)


如果你想迭代地做:

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

但是很少有必要这样做。我只是提到它,因为set.add方法非常有用。

最直接的解决方法是:

s = set(filelist)

在你的原始代码中的问题是,值没有被分配给。下面是修改后的代码:

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

这里有另一个解决方案:

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

在这段代码中,我使用了set方法,以便将其转换为一个集合,然后从列表中删除所有重复的值

你可以这样做

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实现之间可能有所不同。)

简单地说:

new_list = set(your_list)

用这样的迭代方式构造集合的一般方法是:

aset = {e for e in alist}

您还可以使用列表推导式来创建set。

s = {i for i in range(5)}

上面所有的答案都是正确的,但如果你想保持列表的顺序,你需要按照下面的步骤进行

list(dict.fromkeys(your_list))