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

Надеюсь, что это работает для вас!

пс. Честно говоря, я понятия не имею, почему это работает. Я случайно наткнулся на это.