我在 Python 中有一个文件名的 list
,我想创建一个包含所有文件名的 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
方法非常有用。
最直接的解决方案是:
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 实现而异。)
>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])
s = {i for i in range(5)}
简单来说,这一行:
new_list = set(your_list)
list(dict.fromkeys(your_list))
一种常见的迭代构建集合的方法如下:
aset = {e for e in alist}
y = set(x)
- mgilsons = {'foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis}
怎么样? - Jari Turkia