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',
list(reversed(formation))
。但是您可能来自其他语言,很快您就会了解到Python不喜欢仅仅为了一行程序而创建一组类似的方法:)我想他也可以使用(len(formation)-1-list[::-1].index(fCamel))但这也很难看。如果你正在寻找的元素不在列表中,会发生什么?也许如果你描述一下你正在尝试做什么,我们可以帮助你制作一个更好的更“pythonic”解决方案。我正在尝试用python解决驼峰难题,这样我可以稍微学习一下该语言。基本上,如果所有的“F”都在第一个“B”的左侧,则该函数应该返回true。我只是想知道。我看到越来越多的问题没有投票。对我来说,这似乎是一个有趣的问题,如果简单的话。为什么不呢人们对问题投了更多的票?我经常看到对答案投了大量票,这意味着这个问题至少有可能带来有趣的解决方案或讨论,但对问题本身却没有一票。对我来说似乎很奇怪(O_O)干杯!@Morlock:我也经常想知道,我总是试着对任何有趣的问题进行投票。list.reverse不返回list。这是事实。你的问题是什么?如果被提出,那就太好了