2013-02-22 2 views
4

Я совершенно новичок в программировании и только вчера начал изучать питон в научных целях.python: разделение длинной строки в отдельных местах за один проход

Теперь я хотел бы разделить один очень длинную строку (174 символов) на несколько более мелких следующим образом:

string = 'AA111-99XYZ ' 
split = ('AA', 11, 1, -99, 'XYZ') 

Прямо сейчас, единственное, что я могу думать о том, чтобы использовать кусок синтаксиса х - может быть, есть более элегантный способ? Есть ли способ использовать список целых чисел для указания позиций разбиения, например.

split_at = (2, 4, 5, 8, 11) 
split = function(split_at, string) 

Я надеюсь, что мой вопрос не слишком глупо - я не мог найти аналогичный пример, но, возможно, я просто не знаю, что я ищу?

Спасибо,

Jan

ответ

3

Как это:

>>> string = 'AA111-99XYZ ' 

>>> split_at = [2, 4, 5, 8, 11] 

>>> [string[i:j] for i, j in zip([0]+split_at, split_at+[None])] 

['AA', '11', '1', '-99', 'XYZ', ' '] 
1
def split_string(string, points): 
    for left, right in zip(points, points[1:]): 
     yield string[left:right] 
+1

Пример использования: [ 'печать (список (split_string ('AA111-99XYZ', [0, 2, 4, 5, 8, 11])))' -> '[ 'АА', '11 ',' 1 ',' -99 ',' XYZ '] '] (http://ideone.com/u2pz1K) – jfs

0

, чтобы избежать дублирования, вы могли бы принять красивое решение ATOzTOA и положить его в Ламба-функции:

st = 'AA111-99XYZ ' 
sa = [2, 4, 5, 8, 11] 

res = lambda string,split_at:[string[i:j] for i, j in zip([0]+split_at, split_at+[None])] 


print(res(st,sa)) 
0

Будучи относительно новым для самого Python, я принял подход совершенно новичка здесь, чтобы помочь руководить тем, кто еще не знаком с силе Python.

string = 'AA111-99XYZ ' 
split_at = [2, 4, 5, 8, 11] 

for i in range(len(split_at)): 
    if i == 0: 
     print string[:split_at[i]] 
    if i < len(split_at)-1: 
     print string[split_at[i]:split_at[i+1]] 
    if i == len(split_at)-1: 
     print string[split_at[i]:] 
Смежные вопросы