2012-01-17 4 views
2

Это звучит довольно простой, но я думаю, что ca't аккуратного простого метода, чтобы сделать это в Python ещеРазбиение строки в Python на основе индекса

У меня есть строка, как "abcdefgh" и мне нужно, чтобы создать список элементов выбор двух символов за раз из строки, чтобы получить ['ab','cd','ef','gh'].

То, что я делаю сейчас это

output = [] 

for i in range(0,len(input),2): 
    output.append(input[i:i+2]) 

Есть ли способ лучше?

+2

связанный: [Что является самым «питоновым» способом перебора списка в кусках?] (Http://stackoverflow.com/q/434287/4279) – jfs

+0

Мне, вероятно, просто не нравится цикл for там. – atlantis

ответ

4
In [2]: s = 'abcdefgh' 

In [3]: [s[i:i+2] for i in range(0, len(s), 2)] 
Out[3]: ['ab', 'cd', 'ef', 'gh'] 
1

Есть ли способ лучше?

Несомненно. Это может сделать понимание списка.

def n_chars_at_a_time(s, n=2): 
    return [s[i:i+n] for i in xrange(0, len(s), n)] 

должно делать то, что вы хотите. s[i:i+n] возвращает подстроку, начинающуюся с i и заканчивая n символов.

n_chars_at_a_time("foo bar baz boo", 2) 

производит

['fo', 'o ', 'ba', 'r ', 'ba', 'z ', 'bo', 'o'] 

в питона РЕПЛ.

Для получения дополнительной информации см Generator Expressions and List Comprehensions:

Две общих операций на выходе итератора являются

  1. выполнять некоторые операции для каждого элемента,
  2. выбора подмножества элементов, которые удовлетворяют некоторое условие.

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

описаний списков и выражения генератора (короткая форма: «listcomps» и «genexps») представляют собой краткое обозначение для таких операций ...

2

Просто для удовольствия, если вы ненавидите for

>>> s='abcdefgh' 
>>> map(''.join, zip(s[::2], s[1::2])) 
['ab', 'cd', 'ef', 'gh'] 
+0

Я точно думал именно так. – Gandaro

+0

Или 'map (''. Join, zip (* [iter (s)] * 2))'. –

Смежные вопросы