Как отрезать список от элемента n в конец в Python?

В SQLite вы можете использовать рекурсивное общее табличное выражение для решения этой проблемы. Рекурсивный CTE выбирает из исходной таблицы и разбивает строки на части, из которых выбирает основной запрос.

WITH RECURSIVE cte(id, val, etc) AS(
    SELECT id_a, '', str_ids FROM arche
    UNION ALL
    SELECT 
        id
        , SUBSTR(etc, 0, INSTR(etc, '#'))
        , SUBSTR(etc, INSTR(etc, '#')+1)
    FROM cte
    WHERE etc <> ''
)
SELECT id AS id_a, REPLACE(val, 'id', '') AS id_b
FROM cte
WHERE val <> ''
ORDER BY id, val

Вот пример:

Схема (SQLite v3.26)


Запрос № 1 [1113 ]

WITH RECURSIVE cte(id, val, etc) AS(
    SELECT 1, '', '#id1#id2#id4#id7#'
    UNION ALL
    SELECT 
        id
        , SUBSTR(etc, 0, INSTR(etc, '#'))
        , SUBSTR(etc, INSTR(etc, '#')+1)
    FROM cte
    WHERE etc <> ''
)
SELECT id AS id_a, val AS id_b
FROM cte
WHERE val <> ''
ORDER BY id, val;
| id_a | id_b |
| ---- | ---- |
| 1    | id1  |
| 1    | id2  |
| 1    | id4  |
| 1    | id7  |

Просмотр базы данных Fiddle

NB2:

  • REGEXP_REPLACE не существует в SQLite, я заменил его на REPLACE

  • , вам нужно # объявление конца строки, чтобы это работало (наличие двух # `тоже нормально)

    [ 118]
  • это не очень эффективный подход; если вам нужно обработать много строк, это может плохо масштабироваться.

  • [+1121]

43
задан kmario23 17 July 2018 в 03:53
поделиться

3 ответа

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

test[3:] = [3, 4, 5, 6, 7, 8, 9]
test[:3] = [0, 1, 2]
68
ответ дан Angela 26 November 2019 в 22:27
поделиться

Если Вы используете переменную в качестве конечной точки диапазона, можно использовать None.

 start = 4
 end = None
 test[start:end]
63
ответ дан recursive 26 November 2019 в 22:27
поделиться

Просто опустите конец.

test[n:]
8
ответ дан Matthew 26 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

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