2012-07-15 100 views
14

在Python 2.6.5中,給定此列表 mylist = [20,30,25,20]爲什麼這一套理解無效?

爲什麼這個設置理解不起作用?

>>> {x for x in mylist if mylist.count(x) >= 2} 
    File "<stdin>", line 1 
    {x for x in mylist if mylist.count(x) >= 2} 
     ^
SyntaxError: invalid syntax 

謝謝。

+1

對我的作品有V2.7.2,我得到了'set( [20])' – Levon 2012-07-15 00:31:40

+1

什麼「不起作用」呢? – kindall 2012-07-15 00:33:01

+1

http://docs.python.org/dev/whatsnew/2.7.html#python-3-1-features – jdi 2012-07-15 00:33:46

回答

26
$ python2.6 
>>> mylist = [20, 30, 25, 20] 
>>> {x for x in mylist if mylist.count(x) >= 2} 
    File "<stdin>", line 1 
    {x for x in mylist if mylist.count(x) >= 2} 
     ^
SyntaxError: invalid syntax 

$ python2.7 
>>> mylist = [20, 30, 25, 20] 
>>> {x for x in mylist if mylist.count(x) >= 2} 
set([20]) 

你可以使用一個明確的setgenerator完成在python2.6的結果:

>>> set(x for x in mylist if mylist.count(x) >= 2) 
set([20]) 
+2

2.7中的新增功能:設置字面值('{1,2,3,4,5} == set([1,2,3,4,5])) – 2012-07-15 00:43:28

8

你使用的是什麼版本的Python?設置解析appeared in 2.7.x+ and 3.x+。如果您使用的是舊版本,你會得到一個SyntaxError: invalid syntax

>>> {x for x in mylist if mylist.count(x) >= 2} 
    File "<stdin>", line 1 
    {x for x in mylist if mylist.count(x) >= 2} 
     ^
SyntaxError: invalid syntax 

這是不是與Python 2.7.x的情況下+/3.X +:

>>> {x for x in mylist if mylist.count(x) >= 2} 
set([20])