簡體   English   中英

如何在python中構造一組列表項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM