list.reverse不返回列表?

时间:2010-11-25 20:39:32

标签: python functional-programming

None的返回对象名为list.reverse()。因此,当我调用solution(k)时,此代码失败。我有什么方法可以绕过临时的吗?或者我应该怎么做?

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中的第一个代码。我认为它很实用。

10 个答案:

答案 0 :(得分:23)

您可以使用reversed(formation)返回formation的反向迭代器。当你致电formation.reverse()时,它会对列表进行反转并返回None。

编辑:

我看到你现在要做的事情,在我看来,用列表理解来做这件事更容易:

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

答案 1 :(得分:17)

您可以使用切片返回反转列表:

l[::-1]

答案 2 :(得分:5)

要构建GWW的答案,如果您希望此代码能够像{I} 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]

这是否可取是当然是另一个问题。

答案 3 :(得分:4)

list.reverse在原地反转。那就是:

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

请咨询Python documentation,这些内容已经布置在那里。您也可以尝试内置的“帮助”:

  
    
      
        

help(l.reverse)内置函数反向帮助:

      
    
  
     

反向(...)       L.reverse() - 反向 IN PLACE

答案 4 :(得分:2)

我刚刚遇到了这个问题,并希望为来自javascript背景的python新用户澄清一些事情。

在javascript中,a.reverse()在适当位置反转,并在调用时返回数组。

使用Javascript:

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

在python中, a.reverse()在适当位置反转,但不会返回数组。这就是导致我混淆的原因。

在python中:

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

答案 5 :(得分:1)

以下更改将有效:

NumSet={1,2,3,4,5,6,7,8,9,10}
NumList = list(NumSet)
NumList.reverse()
print(NumList)
  • 避免在初始分配后使用赋值运算符,因为列表是可变类型。

  • 将=运算符与方法一起使用。(例如NumList = NumSet.reverse())将使该方法用空白覆盖列表,从而有效地清除列表。这就是为什么列表变为NoneType的原因。 方法是函数,实际上没有自己的值,因此为空白。

答案 6 :(得分: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))))

干杯

答案 7 :(得分:0)

这不能解决F _ B F模式问题,但是它确实解决了当您使用.reverse()时python不返回列表的问题

这是我的解决方法:

chars = ['a', '-', 'c']
chars2 = [] + chars
chars2.reverse()
totalChars = chars + chars2

totalChars返回a-cc-a,这是我想要的,而chars2是一个列表,而不是chars的指针。希望这会有所帮助。

答案 8 :(得分:0)

我不知道这是否对您有用,但这对我有用:

list = [1,2,3]
print([list, list.reverse()][0])

list.reverse()返回None的原因是因为该函数未返回任何内容。

使用您的代码:

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

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

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

print(solution(k))

希望这对您有用!

ps。老实说,我不知道为什么会这样。我偶然发现了它。

答案 9 :(得分:0)

标题问题已经回答,但您真正想知道的是:

基本上,如果所有'F'都位于第一个'B'的左侧,则此函数应返回true

没有'B'后跟'F'相同。检查它的好方法是使用迭代器:

def solution(formation):
    it = iter(formation)
    return not (bCamel in it and fCamel in it)

一些优点:

  • 与每个formation.index(...)解决方案不同,如果搜索到的值不存在,它不会崩溃。
  • 仅占用O(1)多余的空间(与创建列表的反向副本的解决方案不同)。
  • 最多一次触摸每个元素,并尽快停止。甚至具有O(1)时间最佳情况(即使具有数百万个元素,如果列表以['B', 'F',开头,也就在那里停止)。
相关问题