2016-11-02 85 views
-1

下面是代碼我的代碼在python 2上工作,但不在python 3上,爲什麼?

from __future__ import print_function 

upper = [] 
lower = [] 
even = [] 
odd = [] 

def separator(a): 
    print(a) 
    if a.isalpha(): 
     if a.isupper(): 
      upper.append(a) 
     else: 
      lower.append(a) 
    else: 
     if int(a)%2 == 0: 
      even.append(a) 
     else: 
      odd.append(a) 
    return 
list = ['S','o','t',''] 
map(separator,list)  

upper.sort() 
lower.sort() 
even.sort() 
odd.sort() 

t = lower+upper+odd+even 
print(t) 

在這裏,當我運行的代碼,它工作正常,在蟒蛇2,但同樣不會對蟒蛇3. 分隔符功能是沒有得到來自地圖稱爲不工作。

+1

請注意,爲其副作用創建一個列表是皺眉。 – TigerhawkT3

回答

0

在Python 3中,map返回一個迭代器 - 它只會在迭代結果時調用每個元素上的函數。爲了解決這個問題,可以將map的結果轉換爲tuplelist,以便迭代器被消耗(並因此被執行)。

tuple(map(separator,list)) 

但是請注意,你的代碼是非常糟糕的風格 - map應(通常情況下)產生新的數據,而不是編輯全局變量。

+0

注意:這裏的'map'的Pythonic替換隻是'列表中的x:separator(x)'。當然,你也不會命名一個變量'list'(特別是在全局範圍內,因爲它隱藏了在那之後執行的所有代碼的'list'構造函數)。 – ShadowRanger

0

mapworks differently在Python 2中比在Python 3中。在Python 2中,地圖將運行併產生一個列表。在Python 3中,它只是返回一個迭代器,你必須迭代才能得到結果。

使用map你在這裏的方式不是真正的習慣,所以我建議你只使用「正常」循環。

相關問題