2012-06-04 71 views
2

我試着在Pyscripter中運行下面的代碼,但它一直返回錯誤「'list'object is callable」。我通過Python shell運行代碼,它工作得很好。我不太明白爲什麼它不在Pyscripter中工作。另外,我正在使用Python 2.7。Python'list'對象不可調用

import itertools 
print list(itertools.permutations([1,2,3,4], 2)) 

即使在Pyscripter中創建一個簡單的列表也會返回相同的錯誤。

list() 

在此先感謝!

回答

8

幾乎可以肯定你已經反彈名稱列表列表實例:

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

不要通話清單list,或字符串str等。

+1

這似乎是問題,謝謝! – whodareswins

5

你,以前的地方,創建一個列表並將其命名爲list。這是一個壞主意。名稱list未在Python中專門處理。當您啓動解釋器時,list會將列表類型命名,但如果您隨後命名其他名稱list,則list不能再作爲列表類型的名稱,因爲名稱一次只能引用一個事物。

因此,當你寫list()希望創建一個新的列表(即實例列表類型),Python做什麼總是這樣:它看起來這名字list,然後嘗試應用()(即__call__)到任何有這個名字。由於list現在指的是其他一些列表,因此錯誤信息與'list' objects are not callable一樣失敗。

+1

完整意義,謝謝! – whodareswins

0

單詞列表str是Python中的關鍵字。這就是爲什麼腳本有錯誤。你可以嘗試像這樣:

import itertools 

print(list(itertools.permutations([1,2,3,4], 2))) 

List = [1,2,3,4,5,6] 
print(list(itertools.permutations(List, 2))) 

乾杯!