2010-11-25 63 views
13

對於list.reverse(),返回對象的名稱爲None。因此,當我撥打solution(k)時,此代碼失敗。有什麼辦法可以解決暫時的問題嗎?或者我應該怎麼做?list.reverse不返回列表?

fCamel = 'F' 
bCamel = 'B' 
gap = ' ' 

k = ['F', ' ', 'B', 'F'] 

def solution(formation): 
    return ((formation.index(bCamel) > (len(formation) - 1 - (formation.reverse()).index(fCamel)))) 

p.s.這是我在Python中的第一個代碼。我認爲它是功能性的。

+0

,如果你正在尋找的元素在列表中沒有出現什麼情況?也許如果你描述你正在做的事情,我們可以幫助你製作更好的「pythonic」解決方案。 – GWW 2010-11-25 20:52:47

+0

我正試圖解決python中的駱駝拼圖,所以我可以學習一點語言。基本上,如果所有'F都在第一個'B'的左邊,這個函數應該返回true。 – nakiya 2010-11-25 20:57:13

+0

只是想知道。我看到越來越多的問題仍然沒有積極性。這似乎是一個有趣的問題,如果簡單的話,對我來說。爲什麼人們不會多投一些問題?我經常看到大量的答覆投票,這意味着這個問題至少有可能帶來有趣的解決方案或討論,但不是一個投票的問題本身。對我來說似乎很奇怪(O_O)乾杯! – Morlock 2010-11-25 21:13:32

回答

18

您可以使用reversed(formation)返回formation的反向迭代器。當您致電formation.reverse()時,它會反轉列表並返回無。

編輯:

我看到你正在嘗試現在要做的,在我看來,它更容易只是這樣做與列表理解:

def solution(formation): 
    return len([k for k in formation[formation.index(bCamel)+1:] if k == fCamel]) == 0 

這基本上着眼於後的所有元素第一個bCamel並收集所有具有值fCamel的元素。如果該列表的長度爲== 0,則您有解決方案。

下面是幾個例子:

>>> k = ['F','F','B','B','F'] 
>>> solution(k) 
False 
>>> k = ['F','F','B','B','B'] 
>>> solution(k) 
True 
>>> k = ['F','F','B','F','F','B','B'] 
>>> solution(k) 
False 
>>> 
4

list.reverse就地逆轉。那就是:

>>> l = [1, 2, 3] 
>>> l.reverse() 
>>> l 
[3, 2, 1] 

請諮詢Python documentation,這樣的事情是有佈局。您也可以嘗試在 '幫助' 內置:

幫助(l.reverse)幫助的內置功能相反:

反向( ...) L.reverse() - 反向IN地方

5

要建立在GWW的答案上,如果您希望此代碼按原樣工作,您只需執行list(reversed(formation))。如果你真的希望能夠使用formation.reverse()相反,你將不得不繼承list

>>> class ReversableList(list): 
...  def reverse(self): 
...   return list(reversed(self)) 
... 
>>> x = ReversableList([1,2,3]) 
>>> x.reverse() 
[3, 2, 1] 

這是否是可取的當然是另外一個問題。

0

不是超級漂亮,但我沒有在先例答案中找到相應的東西。如果速度或內存成本很低(列表不是很長或操作不會重複很多次),這是非常直接的,甚至更容易閱讀。

import copy 

fCamel = 'F' 
bCamel = 'B' 
gap = ' ' 

k = ['F', ' ', 'B', 'F'] 

def solution(formation): 
    rev_formation = copy.copy(formation) 
    rev_formation.reverse() 
    return ((formation.index(bCamel) > (len(formation) - 1 - 
      (rev_formation).index(fCamel)))) 

乾杯

14

你可以用切片返回逆轉列表:

l[::-1] 
1

我只是遇到了這個問題,並希望澄清一些事情,爲用戶新的Python從一個javascript來背景。

在javascript中,a.reverse()在原地顛倒過來,並在調用時返回數組。

的Javascript:

var a = [2, 3 ,4] 
console.log(a.reverse()) 
// outputs [4, 3, 2] 

在蟒蛇,a.reverse()逆轉到位,但不返回數組。這是對我造成困惑的原因。

在蟒蛇:

a = [2, 3, 4] 
a.reverse() 
print(a) 
# outputs [4, 3, 2] 
# can't do print(a.reverse())