リストに設定されたPython


159

Pythonでセットをリストに変換するにはどうすればよいですか?使用する

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

動作しません。それは私に与えます:

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

6
上記はPython 2.7で動作します。
aukaost 2011

20
コードで別の変数に名前を付けsetた場合は、組み込み関数をシャドウしているので、それを変更しますset
mouad '26

5
@mouadいいえ、aの括弧内の文字列TypeErrorの名前であり、変数名ではありません
phihag

7
@ジョン・ディード裁判官:あなたはlist = some_setどこかでやった。print list呼び出す前に追加してください。
Jochen Ritzel、2011

6
'list'がPDBコマンドとしてオーバーライドされているPDBでデバッグ中にこの問題に遭遇しました。
WP McNeill

回答:


242

コード機能します(cpython 2.4、2.5、2.6、2.7、3.1、および3.2でテスト)。

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

list誤って上書きしていないことを確認します。

>>> assert list == __builtins__.list

2
この正確なコードをコピーしてIDLEに貼り付けたところです。エラーが発生します。

dir(set)and の出力を提供できますprint setか?
Susam Pal 2011

['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'](charの制限により__は削除されました)

@裁判官John Deedどの行でエラーが発生しますか?あなたsetは元気に見えます。
phihag

setではなくSetを試してください:REF:docs.python.org/2/library/sets.html
Gonzalo

72

誤って変数名として使用して組み込みセットをシャドウしました。ここにエラーを複製する簡単な方法があります

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

最初の行は、setをsetのインスタンスに再バインドします。2行目は、もちろん失敗するインスタンスを呼び出そうとしています。

以下は、変数ごとに異なる名前を使用した、混乱の少ないバージョンです。新しい通訳を使う

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

うまくいけば、呼び出しaがエラーであることは明らかです


25

書く前にset(XXXXX) 、変数として "set"を使用しました。

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


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

15

これは動作します:

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

ただし、変数名として「リスト」または「セット」を使用した場合は、次のようになります。

TypeError: 'set' object is not callable

例えば:

>>> 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

変数名として「list」を使用した場合も同じエラーが発生します。




2

マップ関数とラムダ関数の組み合わせを試してください:

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

文字列に一連の数値があり、それを整数のリストに変換する場合は、非常に便利な方法です。

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.