list.reverse不返回列表?

nak*_*iya 18 python functional-programming

返回对象的名称Nonelist.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))))
Run Code Online (Sandbox Code Playgroud)

ps这是我在python中的第一个代码.我觉得它很实用.

GWW*_*GWW 24

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

编辑:

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

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

这基本上会查看第一个元素之后的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
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于OP的未修改代码,因为"反向"不返回列表,而是返回迭代器(没有"索引"方法). (3认同)
  • `list(reverse(形成))`那更好:) (3认同)
  • 如果你绝对必须把它保持在一行,你可以使用像`list(reversed(形成))`这样的东西.但是你很可能来自其他语言,你很快就会发现Python不赞成为了单行而创建一堆类似的方法:) (2认同)

Leo*_*eon 19

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

l[::-1]
Run Code Online (Sandbox Code Playgroud)

  • 这是这个问题的真正答案.它会就地返回一个反向列表,因此您可以在列表推导中执行此操作. (2认同)

rbp*_*rbp 6

list.reverse 就地反转。那是:

>>> l = [1, 2, 3]
>>> l.reverse()
>>> l
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

请查阅Python 文档,类似的内容都在那里。您还可以尝试内置的“帮助”:

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

verse(...) L.reverse() --就地反向


Jas*_*ker 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]
Run Code Online (Sandbox Code Playgroud)

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


小智 5

我刚刚遇到这个问题,想为来自 javascript 背景的 Python 新用户澄清一些事情。

在 javascript 中,a.reverse() 会原地反转并在调用时返回数组。

JavaScript:

var a = [2, 3 ,4]
console.log(a.reverse())
// outputs [4, 3, 2]
console.log(a)
// outputs [4, 3, 2]
Run Code Online (Sandbox Code Playgroud)

在Python中,a.reverse()原地反转,但不返回数组。这就是让我感到困惑的原因。

在Python中:

a = [2, 3, 4]
a.reverse()
print(a)
# outputs [4, 3, 2]
# can't do print(a.reverse())
Run Code Online (Sandbox Code Playgroud)