List.reverse не возвращает список?
Возвращаемый объект имеет имя 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. Я думал, что это функционально.
Ответы
Ответ 1
Вы можете использовать reversed(formation)
, чтобы вернуть обратный итератор formation
. Когда вы вызываете formation.reverse()
, он выполняет отмену списка и возвращает None.
EDIT:
Я вижу, что вы пытаетесь сделать сейчас, на мой взгляд, проще просто сделать это со списком:
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
>>>
Ответ 2
Вы можете использовать нарезку, чтобы вернуть перевернутый список:
l[::-1]
Ответ 3
Чтобы использовать ответ 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]
Независимо от того, является ли это целесообразным, это, конечно, другой вопрос.
Ответ 4
list.reverse меняет места на место. То есть:
>>> l = [1, 2, 3]
>>> l.reverse()
>>> l
[3, 2, 1]
Обратитесь к документации Python, такие вещи, как эти, выложены там. Вы также можете попробовать встроенную "помощь":
help (l.reverse) Справка по встроенной функции reverse:
обратный (...) L.reverse() - reverse IN PLACE
Ответ 5
Я только столкнулся с этой проблемой и хотел прояснить некоторые вещи для пользователей, плохо знакомых с python, происходящих из фона javascript.
В javascript a.reverse() переворачивается на месте, а также возвращает массив при вызове.
Javascript:
var a = [2, 3 ,4]
console.log(a.reverse())
// outputs [4, 3, 2]
В python a.reverse() переворачивается на месте, но не возвращает массив. Это то, что вызвало у меня замешательство.
В питоне:
a = [2, 3, 4]
a.reverse()
print(a)
# outputs [4, 3, 2]
# can't do print(a.reverse())
Ответ 6
следующие изменения будут эффективны:
NumSet={1,2,3,4,5,6,7,8,9,10}
NumList = list(NumSet)
NumList.reverse()
print(NumList)
-
Избегайте использования оператора присваивания после начального присваивания, так как списки являются изменяемыми типами.
-
Использование оператора = с методом.. (например, NumList = NumSet.reverse()) приведет к тому, что метод перезапишет список с пустым, тем самым эффективно очистив список. Вот почему список становится NoneType. Методы являются функциями и на самом деле не имеют своего собственного значения, следовательно, пустые.
Ответ 7
Не супер красиво, но я не нашел эквивалента в ответах на прецеденты. Если затраты на скорость или память низки (список не очень длинный или операция не повторяется много раз), это довольно прямолинейно и даже легче читать.
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))))
Приветствия
Ответ 8
Это не дает решения проблемы с шаблоном F _ BF, но решает проблему с тем, что python не возвращает список при использовании .reverse().
Вот как я обошел это:
chars = ['a', '-', 'c']
chars2 = [] + chars
chars2.reverse()
totalChars = chars + chars2
totalChars возвращает a-cc-a, что я и хотел, и chars2 - это список, а не указатель на символы. Надеюсь это поможет.
Ответ 9
Я не знаю, работает ли это для вас, но это работает для меня:
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))
Надеюсь, что это работает для вас!
пс. Честно говоря, я понятия не имею, почему это работает. Я случайно наткнулся на это.