Câu trả lời:
Nếu bạn có một danh sách các đối tượng có thể băm (tên tệp có thể là chuỗi, vì vậy chúng nên được tính):
lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]
bạn có thể xây dựng bộ trực tiếp:
s = set(lst)
Trong thực tế, set
sẽ làm việc theo cách này với bất kỳ đối tượng lặp lại! (Không phải vịt đang gõ tốt sao?)
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 hiếm khi cần phải làm theo cách này. Tôi chỉ đề cập đến nó bởi vì set.add
phương pháp này khá hữu ích.
y = set(x)
Giải pháp trực tiếp nhất là đây:
s = set(filelist)
Vấn đề trong mã gốc của bạn là các giá trị không được gán cho tập hợp . Đây là phiên bản sửa lỗi của mã của bạn:
s = set()
for filename in filelist:
s.add(filename)
print(s)
Bạn có thể làm
my_set = set(my_list)
hoặc, đối với Python 3,
my_set = {*my_list}
để tạo một 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 một danh sách từ một bộ.
Chỉ cần lưu ý rằng thứ tự của các thành phần trong danh sách thường bị mất khi chuyển đổi danh sách thành tập hợp do tập hợp vốn không có thứ tự. (Tuy nhiên, một ngoại lệ trong CPython là 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 triển khai các bộ trong CPython và hành vi này có thể khác nhau giữa các lần triển khai Python khác nhau.)