2013-04-02 28 views

Trả lời

134

Nếu bạn có một danh sách các đối tượng hashable (tên tập tin có lẽ sẽ là chuỗi, vì vậy họ nên tính):

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

bạn có thể xây dựng các thiết lập trực tiếp:

s = set(lst) 

Trong thực tế, set sẽ hoạt động theo cách này với bất kỳ đối tượng có thể lặp nào! (Không phải là vịt gõ tuyệt vời?)


Nếu bạn muốn làm điều đó lặp đi lặp lại:

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

Nhưng có hiếm khi cần phải làm điều đó theo cách này. Tôi chỉ đề cập đến nó vì phương pháp set.add khá hữu ích.

+0

Tôi đang sử dụng 2,7 và điều này dường như không hoạt động. Những gì đang xảy ra ở đây? Python 2.7.13 (mặc định, ngày 24 tháng 7 năm 2017, 14:22:59) [GCC 4.2.1 tương thích với Apple LLVM 8.1.0 (clang-802.0.42)] trên darwin Nhập "trợ giúp", "bản quyền", "tín dụng" hoặc "giấy phép" để biết thêm thông tin. >>> x = [1,2,3] >>> thiết lập (x) bộ ([1, 2, 3]) >>> – user1902291

+0

@ user1902291-- Dường như nó hoạt động, bạn chỉ cần neek để theo dõi tập hợp kết quả: 'y = set (x)' – mgilson

7

Giải pháp trực tiếp nhất là thế này:

s = set(filelist) 

Vấn đề trong mã ban đầu của bạn là các giá trị đã không được gán cho thiết. Dưới đây là phiên bản cố định-up của mã của bạn:

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

Dưới đây là một giải pháp:

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

Trong mã này, tôi đã sử dụng phương thức thiết lập để biến nó thành một tập và sau đó nó loại bỏ tất cả các giá trị nhân bản từ danh sách

0

Bạn có thể làm

my_set = set(my_list) 

hoặc, đối với Python 3,

my_set = {*my_list} 

để tạo bộ từ danh sách. Ngược lại, bạn cũng có thể làm

my_list = list(my_set) 

hoặc, đối với Python 3,

my_list = [*my_set] 

để tạo ra một danh sách từ một tập.

Chỉ cần lưu ý rằng thứ tự của các phần tử trong danh sách thường bị mất khi chuyển đổi danh sách thành một bộ vì tập hợp vốn không có thứ tự. (Một ngoại lệ trong CPython, mặc dù, có vẻ như nếu danh sách chỉ bao gồm các số nguyên không âm, nhưng tôi cho rằng đây là hậu quả của việc thực hiện các bộ trong CPython và hành vi này có thể khác nhau giữa các triển khai Python khác nhau.)

Các vấn đề liên quan