Расширенная часть, которая переходит к началу последовательности отрицательным шагом

Я построил его для вас здесь: https://codepen.io/anon/pen/PXvNvz

То, что вам, похоже, не хватает, - это класс таблицы:

[ 110]

Я также переместил ваш класс строк, у которого был div myLegend, в верхнюю часть документа, так как он не выглядит так, как будто он вам нужен ниже

РЕДАКТИРОВАТЬ:

Я построил я думаю, что вы пытаетесь сделать по-другому, что может быть лучше, вот как я бы это сделал: https://codepen.io/anon/pen/jXorXQ?editors=1000 [117 ]

13
задан recursive 30 December 2008 в 00:03
поделиться

7 ответов

Хорошо, я думаю, что это, вероятно, столь же хорошо, как я получу его. Благодаря Abgan для зажигания идеи. Это полагается на то, что Ни один в части не рассматривают, как будто это был недостающий параметр. Кто-либо получил что-нибудь лучше?

def getReversedList(aList, end, start, step):
    return aList[end:start if start!=-1 else None:step]

править: проверьте на start==-1, нет 0

Это все еще не идеально, потому что Вы ударяете обычное поведение-1. Кажется, что проблемой вот являются два перекрывающихся определения того, что, как предполагается, происходит. Кто бы ни побеждает, устраняет в других отношениях допустимые вызовы, ища другое намерение.

2
ответ дан 2 December 2019 в 00:59
поделиться

Это подвержено ошибкам для изменения семантики start и stop. Использовать None или -(len(a) + 1) вместо 0 или -1. Семантика не произвольна. См. статью "Why numbering should start at zero" Edsger W. Dijkstra.

>>> a = range(10)
>>> start, stop, step = 4, None, -1

Или

>>> start, stop, step = 4, -(len(a) + 1), -1
>>> a[start:stop:step]
[4, 3, 2, 1, 0]

Или

>>> s = slice(start, stop, step)
>>> a[s]
[4, 3, 2, 1, 0]

Когда s последовательность отрицательные индексы в s[i:j:k] рассматриваются особенно:

Если i или j отрицательно, индекс относительно конца строки: len(s) + i или len(s) + j заменен. Но отметьте это -0 тихо 0.

именно поэтому len(range(10)[4:-1:-1]) == 0 потому что это эквивалентно range(10)[4:9:-1].

5
ответ дан 2 December 2019 в 00:59
поделиться
[ A[b] for b in range(end,start,stride) ]

Медленнее, однако можно использовать отрицательные индексы, таким образом, это должно работать:

[ A[b] for b in range(9, -1, -1) ]

Я понимаю, что это не использует части, но думало, что я предложу решение так или иначе, если использование частей специально для получения результата не является приоритетом.

2
ответ дан 2 December 2019 в 00:59
поделиться

Я полагаю, что следующее не удовлетворяет Вас:

def getReversedList(aList, end, start, step):
    if step < 0 and start == 0:
         return aList[end::step]
    return aList[end:start:step]

или он?:-)

1
ответ дан 2 December 2019 в 00:59
поделиться

Но Вы не можете использовать это при хранении индексов в переменных, например.

Действительно ли это удовлетворительно?

>>> a = range(10)
>>> start = 0
>>> end = 4
>>> a[4:start-1 if start > 0 else None:-1]
[4, 3, 2, 1, 0]
1
ответ дан 2 December 2019 в 00:59
поделиться

Поскольку Вы говорите, что очень немного людей полностью понимают все, что можно сделать с расширенным разрезанием, поэтому если Вам действительно не нужна дополнительная производительность, я сделал бы это "очевидный" путь:

rev_subset = reversed(data[start:stop])

1
ответ дан 2 December 2019 в 00:59
поделиться
a[4::-1]

Пример:

Python 2.6 (r26:66714, Dec  4 2008, 11:34:15) 
[GCC 4.0.1 (Apple Inc. build 5488)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[4:0:-1]
[4, 3, 2, 1]
>>> a[4::-1]
[4, 3, 2, 1, 0]
>>> 

Причина состоит в том, что второй срок интерпретируется как, "в то время как не индексируют ==". Пропуск его "в то время как индекс в диапазоне".

0
ответ дан 2 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: