Перевернуть строку в Python

Я искал способ форматирования чисел без ведущих или конечных пробелов , периодов, нулей (кроме одного ведущего нуля для чисел, меньших 1, которые должны присутствовать).

] Это разочаровывает то, что такое обычное форматирование не может быть легко достигнуто в Oracle.

Даже Том Ките предложил только сложное обходное решение следующим образом:

case when trunc(x)=x
    then to_char(x, 'FM999999999999999999')
    else to_char(x, 'FM999999999999999.99')
end x

Но мне удалось найти более короткое решение, которое упоминает значение только один раз:

rtrim(to_char(x, 'FM999999999999990.99'), '.')

Этот работает как ожидалось для всех возможных значений:

select 
    to_char(num, 'FM99.99') wrong_leading_period,
    to_char(num, 'FM90.99') wrong_trailing_period,
    rtrim(to_char(num, 'FM90.99'), '.') correct
from (
  select num from (select 0.25 c1, 0.1 c2, 1.2 c3, 13 c4, -70 c5 from dual)
  unpivot (num for dummy in (c1, c2, c3, c4, c5))
) sampledata;

    | WRONG_LEADING_PERIOD | WRONG_TRAILING_PERIOD | CORRECT |
    |----------------------|-----------------------|---------|
    |                  .25 |                  0.25 |    0.25 |
    |                   .1 |                   0.1 |     0.1 |
    |                  1.2 |                   1.2 |     1.2 |
    |                  13. |                   13. |      13 |
    |                 -70. |                  -70. |     -70 |

По-прежнему ищет еще более короткое решение.

Существует укороченный подход с пользовательской вспомогательной функцией:

create or replace function str(num in number) return varchar2
as
begin
    return rtrim(to_char(num, 'FM999999999999990.99'), '.');
end;

Но пользовательские функции pl / sql имеют значительную производительность накладные расходы , которые не подходят для тяжелых запросов.

1240
задан Alex Riley 6 October 2017 в 09:18
поделиться

2 ответа

How about:

>>> 'hello world'[::-1]
'dlrow olleh'

This is extended slice syntax. It works by doing [begin:end:step] - by leaving begin and end off and specifying a step of -1, it reverses a string.

2570
ответ дан 19 December 2019 в 20:14
поделиться

@Paolo's s[::-1] is fastest; a slower approach (maybe more readable, but that's debatable) is ''.join(reversed(s)).

252
ответ дан 19 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

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