list.reverse не возвращает список? - PullRequest
15 голосов
/ 25 ноября 2010

Возвращаемый объект называется 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))))

ps Это мой первый код на python.Я думал, что это было функционально.

Ответы [ 9 ]

24 голосов
/ 25 ноября 2010

Вы можете использовать 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
>>> 
18 голосов
/ 25 сентября 2013

Вы можете использовать нарезку, чтобы вернуть перевернутый список:

l[::-1]
5 голосов
/ 25 ноября 2010

Если исходить из ответа 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 голосов
/ 25 ноября 2010

list.reverse меняет местами. То есть:

>>> l = [1, 2, 3]
>>> l.reverse()
>>> l
[3, 2, 1]

Пожалуйста, обратитесь к документации Python , подобные вещи выложены там. Вы также можете попробовать встроенную «помощь»:

help (l.reverse) Справка по встроенной обратной функции:

обратная (...) L.reverse () - обратный НА МЕСТЕ

2 голосов
/ 11 февраля 2018

Я только что столкнулся с этой проблемой и хотел прояснить некоторые вещи для пользователей, плохо знакомых с 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())
1 голос
/ 30 декабря 2018

вступают в силу следующие изменения:

NumSet={1,2,3,4,5,6,7,8,9,10}
NumList = list(NumSet)
NumList.reverse()
print(NumList)
  • избегайте использования оператора присваивания после первоначального присваивания, поскольку списки являются изменяемыми типами.

  • Использование оператора = с методом. (Например, NumList = NumSet.reverse ()) приведет к тому, что метод перезапишет список пробелом, тем самым эффективно очистив список.Вот почему список становится NoneType.Методы являются функциями и на самом деле не имеют своего собственного значения, поэтому они пустые.

0 голосов
/ 06 июля 2019

Я не знаю, работает ли это для вас, но это работает для меня:

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

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

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

0 голосов
/ 02 августа 2018

Это не дает решения проблемы паттерна F _ BF, но действительно решает проблему с Python, не возвращающим список при использовании .reverse ().

Вот как я обошел это:

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

totalChars возвращает a-cc-a, что я и хотел, AND chars2 - это список, а не указатель на chars.Надеюсь, это поможет.

0 голосов
/ 26 ноября 2010

Не супер красиво, но я не нашел эквивалента в предыдущих ответах. Если скорость или стоимость памяти низки (список не очень длинный или операция не повторяется огромное количество раз), это довольно просто и даже легче для чтения.

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

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...