【发布时间】:2013-03-24 00:31:09
【问题描述】:
我在 python 中有一个list 的文件名,我想从所有文件名中构造一个set。
filelist=[]
for filename in filelist:
set(filename)
这似乎不起作用。怎么会这样?
【问题讨论】:
我在 python 中有一个list 的文件名,我想从所有文件名中构造一个set。
filelist=[]
for filename in filelist:
set(filename)
这似乎不起作用。怎么会这样?
【问题讨论】:
如果你有一个可散列对象的列表(文件名可能是字符串,所以它们应该计算在内):
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 方法非常有用。
【讨论】:
y = set(x)
s = {'foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis} 怎么样?
最直接的解决办法是这样的:
s = set(filelist)
原始代码中的问题是这些值没有分配给 set。这是您的代码的固定版本:
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:\\'])
在这段代码中,我使用 set 方法将其转换为集合,然后从列表中删除所有重复值
【讨论】:
简单地说:
new_list = set(your_list)
【讨论】:
一种以迭代方式构造集合的一般方法,如下所示:
aset = {e for e in alist}
【讨论】:
您也可以使用列表推导来创建集合。
s = {i for i in range(5)}
【讨论】: