Python list.reverse不返回列表吗?

Python list.reverse不返回列表吗?,python,functional-programming,Python,Functional Programming,对于list.reverse(),返回对象被命名为None。因此,当我调用解决方案(k)时,此代码失败。有什么办法可以让我暂时离开吗?或者我该怎么做 fCamel = 'F' bCamel = 'B' gap = ' ' k = ['F', ' ', 'B', 'F'] def solution(formation): return ((formation.index(bCamel) > (len(formation) - 1 - (formation.reverse()).i

对于
list.reverse()
,返回对象被命名为
None
。因此,当我调用
解决方案(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、 这是我用python编写的第一个代码。我认为它是功能性的。

您可以使用
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
>>> 

列表。反转在原地。即:

>>> l = [1, 2, 3]
>>> l.reverse()
>>> l
[3, 2, 1]
请参考,像这样的东西都摆在那里了。您也可以尝试内置的“帮助”:

帮助(l.reverse)内置函数reverse的帮助:

反向(…) L.反转()--原地反转


要基于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]

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

不是非常漂亮,但我在之前的答案中没有找到相应的答案。如果速度或内存成本很低(列表不是很长,或者操作没有重复很多次),这是非常直接的,甚至更容易阅读

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

干杯

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

l[::-1]

我刚刚遇到了这个问题,想为来自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]
在python中,a.reverse()原地反转,但不返回数组。这就是造成我困惑的原因

在python中:

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

这并没有为F B F模式问题提供解决方案,但它确实解决了python在使用.reverse()时不返回列表的问题

我就是这样绕过它的:

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

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

以下更改将有效:

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

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


我不知道这是否对你有效,但对我有效:

list = [1,2,3]
print([list, list.reverse()][0])
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))
希望这对你有用


老实说,我不知道为什么会这样。我无意中发现了它。

标题问题已经得到了回答,但你真正想要的是:

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

这与后面没有“B”和“F”是一样的。检查这一点的好方法是使用迭代器:

def solution(formation):
    it = iter(formation)
    return not (bCamel in it and fCamel in it)
一些优点:

  • 与每个
    formation.index(…)
    解决方案不同,如果搜索值不在那里,它不会崩溃
  • 只需要0(1)个额外空间(不同于创建列表反向副本的解决方案)
  • 最多接触每个元素一次,并尽快停止。即使有O(1)个时间最佳情况(即使有数百万个元素,如果列表以
    ['B','F',
    开头,那么它就停在那里)

这对OP的未修改代码不起作用,因为“reversed”不返回列表,而是返回迭代器(它没有“index”方法).是的,我记得并调整了我的评论。他肯定需要修改他的代码,使其按他想要的方式工作。我确实理解。但是,如果它返回反向对象(这个?或者你在python中称它为什么?)也对吗?还有其他函数可以这样做吗?否则我会有另外两行:(如果你一定要把它放在一行中,你可以使用类似于
list(reversed(formation))
。但是您可能来自其他语言,很快您就会了解到Python不喜欢仅仅为了一行程序而创建一组类似的方法:)我想他也可以使用(len(formation)-1-list[::-1].index(fCamel))但这也很难看。如果你正在寻找的元素不在列表中,会发生什么?也许如果你描述一下你正在尝试做什么,我们可以帮助你制作一个更好的更“pythonic”解决方案。我正在尝试用python解决驼峰难题,这样我可以稍微学习一下该语言。基本上,如果所有的“F”都在第一个“B”的左侧,则该函数应该返回true。我只是想知道。我看到越来越多的问题没有投票。对我来说,这似乎是一个有趣的问题,如果简单的话。为什么不呢人们对问题投了更多的票?我经常看到对答案投了大量票,这意味着这个问题至少有可能带来有趣的解决方案或讨论,但对问题本身却没有一票。对我来说似乎很奇怪(O_O)干杯!@Morlock:我也经常想知道,我总是试着对任何有趣的问题进行投票。list.reverse不返回list。这是事实。你的问题是什么?如果被提出,那就太好了