![](/img/trans.png)
[英]Python - How to construct a numpy array out of a list of objects efficiently
[英]How to construct a set out of list items in python?
我在 python 中有一個文件名
list<\/code> ,我想用所有文件名構建一個
set<\/code> 。
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)
原始代碼中的問題是值沒有分配給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)}
以上所有答案都是正確的,但是如果您想保留列表的順序,則需要按照以下步驟進行
list(dict.fromkeys(your_list))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.