python: список тактик понимания - PullRequest
8 голосов
/ 22 января 2009

Я хочу взять строку и создать список строк, которые составляют исходную строку.

например:.

"asdf" => ["a", "as", "asd", "asdf"]

Я уверен, что есть "питонный" способ сделать это; Я думаю, что просто схожу с ума. Какой лучший способ сделать это?

Ответы [ 2 ]

19 голосов
/ 22 января 2009

Одна возможность:

>>> st = 'asdf'
>>> [st[:n+1] for n in range(len(st))]
['a', 'as', 'asd', 'asdf']
17 голосов
/ 22 января 2009

Если вы собираетесь зацикливаться на элементах своего «списка», вам лучше использовать генератор, а не понимание списка:

>>> text = "I'm a little teapot."
>>> textgen = (text[:i + 1] for i in xrange(len(text)))
>>> textgen
<generator object <genexpr> at 0x0119BDA0>
>>> for item in textgen:
...     if re.search("t$", item):
...         print item
I'm a lit
I'm a litt
I'm a little t
I'm a little teapot
>>>

Этот код никогда не создает объект списка, а также (дельта-сборщик мусора) не создает более одной дополнительной строки (в дополнение к text).

...