Python đặt thành danh sách


159

Làm cách nào tôi có thể chuyển đổi một tập hợp thành một danh sách trong Python? Sử dụng

a = set(["Blah", "Hello"])
a = list(a)

không hoạt động. Nó đưa cho tôi:

TypeError: 'set' object is not callable
python  list  set 

6
Các công việc trên cho tôi trên Python 2.7.
aukaost

20
nếu bạn đặt tên cho một biến khác trong mã của mình, hãy setthay đổi nó bởi vì bạn đang che giấu hàm dựng sẵn set.
mouad

5
@mouad Không, chuỗi trong ngoặc đơn trong a TypeErrorlà tên của loại , không phải tên biến
phihag

7
@Judge John Deed: Bạn đã làm list = some_setở đâu đó. Thêm print listtrước khi bạn gọi nó.
Jochen Ritzel

6
Tôi gặp vấn đề này trong khi gỡ lỗi trong PDB trong đó 'list' bị ghi đè dưới dạng lệnh PDB.
WP McNeill

Câu trả lời:


242

Mã của bạn không hoạt động (được thử nghiệm với cpython 2.4, 2.5, 2.6, 2.7, 3.1 và 3.2):

>>> a = set(["Blah", "Hello"])
>>> a = list(a) # You probably wrote a = list(a()) here or list = set() above
>>> a
['Blah', 'Hello']

Kiểm tra xem bạn đã không ghi đè một listcách tình cờ:

>>> assert list == __builtins__.list

2
Tôi vừa sao chép và dán mã chính xác này trong IDLE; Tôi nhận được lỗi.

Bạn có thể cung cấp đầu ra của dir(set)print set?
Susam Pal

['and', 'class', 'cmp', 'contains', 'delattr', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'iand', 'init', 'ior', 'isub', 'iter', 'ixor', 'le', 'len', 'lt', 'ne', 'new', 'or', 'rand', 'reduce', 'reduce_ex', 'repr', 'ror', 'rsub', 'rxor', 'setattr', 'sizeof', 'str', 'sub', 'subclasshook', 'xor', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update'](đã xóa __ vì giới hạn char)

@Judge John Deed Tại dòng nào bạn nhận được lỗi? setTrông bạn vẫn ổn
phihag

thử Đặt thay vì đặt: REF: docs.python.org/2/l Library / sets.html
Gonzalo

72

Bạn đã che giấu tập hợp dựng sẵn bằng cách vô tình sử dụng nó làm tên biến, đây là một cách đơn giản để sao chép lỗi của bạn

>>> set=set()
>>> set=set()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable

Dòng rebinds đầu tiên được đặt thành một thể hiện của tập hợp. Dòng thứ hai đang cố gắng gọi ví dụ mà tất nhiên không thành công.

Đây là một phiên bản ít gây nhầm lẫn hơn bằng cách sử dụng các tên khác nhau cho mỗi biến. Sử dụng một thông dịch viên mới

>>> a=set()
>>> b=a()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable

Hy vọng rằng rõ ràng là gọi alà một lỗi


25

trước khi viết set(XXXXX) bạn đã sử dụng "set" làm biến

set = 90 #you have used "set" as an object


a = set(["Blah", "Hello"])
a = list(a)

15

Điều này sẽ làm việc:

>>> t = [1,1,2,2,3,3,4,5]
>>> print list(set(t))
[1,2,3,4,5]

Tuy nhiên, nếu bạn đã sử dụng "danh sách" hoặc "bộ" làm tên biến, bạn sẽ nhận được:

TypeError: 'set' object is not callable

ví dụ:

>>> set = [1,1,2,2,3,3,4,5]
>>> print list(set(set))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

Lỗi tương tự sẽ xảy ra nếu bạn đã sử dụng "danh sách" làm tên biến.



4

Mã của bạn hoạt động với Python 3.2.1 trên Win7 x64

a = set(["Blah", "Hello"])
a = list(a)
type(a)
<class 'list'>

2

Hãy thử sử dụng kết hợp các chức năng bản đồ và lambda:

aList = map( lambda x: x, set ([1, 2, 6, 9, 0]) )

Cách tiếp cận rất thuận tiện nếu bạn có một bộ số trong chuỗi và bạn muốn chuyển đổi nó thành danh sách các số nguyên:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.