2014-09-13 2 views
1

Что я хочу сделать, это:как вырезать строку в пару строк в Python

mystr = i_return_a_string() 
fst_part, snd_part = mystr[:4], mystr[4:] 

Но я был бы счастлив, если это может быть сделано (с встроенной функции/метода) как:

fst_part, snd_part = i_return_a_string().cut_at(4) 

Это несколько напоминает str.partition, разница в том, что я хочу, чтобы указать индекс.

  1. Есть ли способ для этого?

  2. если нет, то, что у меня выше, лучший способ?

В этом примере mystr только необходим в качестве временного хранения возвращаемого значения (функции i_return_a_string), никогда не упоминаться снова, что делает меня немного неудобно.

+0

Вы просмотрели документацию методов '' 'str'''? Попробуйте написать свою собственную функцию, тогда, если у вас есть problrms, отправьте еще один вопрос. – wwii

+5

Ваше решение с использованием разрезания - 'fst_part, snd_part = mystr [: 4], mystr [4:]' - это идиоматический способ сделать это в Python. Строкового метода 'cut_at' или встроенной функции не существует (но вы можете написать один, если хотите). –

+0

Что против нарезки? Если вы хотите пропустить временный 'mystr', вы можете сделать' i_return_a_string() 'возврат кортежа строк, - это сделать срез уже внутри функции. – Ghanima

ответ

2

Суммируя комментарии, данные (как я не решаюсь оставить этот вопрос открытого):

  • Использования нарезки является идиоматическим способом (@ZeroPiraeus)
  • Если я действительно не (@wwii, @ZeroPiraeus & @ ответ Бобби), или я могу изменить базовую функцию, чтобы она уже возвращала кортеж (@Ghanima)
  • Использование временных переменных совершенно нормально (@MartijnPieters , @ZeroPiraeus).
  • Если мне действительно нужно действительно использовать встроенный и бла, всегда есть другой способ (ответ @myersjustinc).
+1

Я намеревался, чтобы это был ответ, почти полный и, конечно, не просто «дополнительная информация». Эти пункты, перечисленные выше, в основном то, что мне нужно было знать. Q: Есть ли способ для этого? -> A: Нет, но вы всегда можете написать один. В: Есть ли у меня лучшие способы? -> A: Да, и не беспокойтесь о переменной 'mystr'. Я не понимаю, почему это не считается ответом. – Yosh

1

Если вы действительно почувствовали необходимость (хотя я думаю, что это имеет смысл использовать mystr[:4], mystr[4:] вместо как в вашем примере), вы можете использовать регулярные выражения:

fst_part, snd_part = re.match(r'(.{4})(.*)', i_return_a_string()).groups() 
+1

не так хорош, как оригинал, я думаю –

+2

Я согласен, что это нехорошее решение, но он делает то, что задает ОП. Он не использует промежуточную переменную, это не связано с записью другой функции (потому что по какой-либо причине OP запросил встроенный), и она включает вызов функции 'i_return_a_string' только один раз. – myersjustinc

0

Может быть не точный синтаксис вы» искать, но, может быть, это что-то в вашем переулке?

def i_return_a_string(): 
    return "examplestring" 

def cut_at(example_string, index): 
    return example_string[:index], example_string[index:] 

fst_part, snd_part = cut_at(i_return_a_string(), 4) 
print fst_part, snd_part 
+0

Да, это в основном то, что я хотел. Я хотел знать, есть ли способ по умолчанию или нет и должен ли я сам писать эту функцию или использовать нарезку. – Yosh

+0

Нет ничего действительно встроенного. Я бы сказал, напишите свою собственную функцию, если вы собираетесь использовать эту функциональность много. Ваш оригинальный синтаксис напоминает мне синтаксис Ruby, где вы можете легко использовать методы. – Bobby