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中的第一个代码。我认为它很实用。
答案 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(...)
解决方案不同,如果搜索到的值不存在,它不会崩溃。['B', 'F',
开头,也就在那里停止)。