Python Удаляет последние 3 символа строки

Вы используете C или C++? Следующая версия C++, C++ 0x, будет поддерживать шаблоны variadic , которые предоставляют решение той проблемы.

Другое обходное решение может быть достигнуто умным оператором, перегружающимся для достижения синтаксиса как это:

void f(varargs va) {
    BOOST_FOREACH(varargs::iterator i, va)
        cout << *i << " ";
}

f(args = 1, 2, 3, "Hello");

, Чтобы заставить это работать, класс varargs должен быть реализован для переопределения operator =, который возвращает объект прокси, который, в свою очередь, переопределяет operator ,. Однако создание этого варианта, безопасного с точки зрения типов в текущем C++, не возможно, насколько я знаю, так как это должно было бы работать стиранием типа.

130
задан abyx 25 November 2009 в 17:19
поделиться

9 ответов

Удаление всех пробелов:

foo = ''.join(foo.split())

Удаление последних трех символов:

foo = foo[:-3]

Преобразование в заглавные буквы:

foo = foo.upper()

Весь этот код в одной строке:

foo = ''.join(foo.split())[:-3].upper()
238
ответ дан 24 November 2019 в 00:21
поделиться

Это не работает так, как вы ожидаете, потому что полоса основана на символах. Вместо этого вам нужно сделать это:

foo = foo.replace(' ', '')[:-3].upper()
89
ответ дан 24 November 2019 в 00:21
поделиться

Возможно, вы немного неправильно поняли rstrip, он не удаляет строка, но любой символ в указанной вами строке.

Примерно так:

>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'

Поэтому вместо этого просто используйте

text = text[:-3] 

(после замены пробелов ничем)

8
ответ дан 24 November 2019 в 00:21
поделиться

Я стараюсь избегать регулярных выражений, но это работает:

string = re.sub ("\ s", "", (string.lower ())) [: -3]

2
ответ дан 24 November 2019 в 00:21
поделиться

Что с этим не так?

foo.replace(" ", "")[:-3].upper()
1
ответ дан 24 November 2019 в 00:21
поделиться

Разве вы не выполняете операции в неправильном порядке? Кажется, что ваше требование foo [: - 3] .replace ("", "") .upper ()

0
ответ дан 24 November 2019 в 00:21
поделиться

Это кое-что зависит от вашего определения пробелов. Обычно я бы назвал пробелами пробелы, табуляции, разрывы строк и возврат каретки. Если это ваше определение, вы хотите использовать регулярное выражение с \ s для замены всех символов пробелов:

import re

def myCleaner(foo):
    print 'dirty: ', foo
    foo = re.sub(r'\s', '', foo)
    foo = foo[:-3]
    foo = foo.upper()
    print 'clean:', foo
    print

myCleaner("BS1 1AB")
myCleaner("bs11ab")
myCleaner("BS111ab")
0
ответ дан 24 November 2019 в 00:21
поделиться
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'
2
ответ дан 24 November 2019 в 00:21
поделиться
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'
14
ответ дан 24 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

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