2014-12-01 4 views
1

Есть ли простой способ итеративно удалить каждую начальную букву строки в диапазоне? поэтому я хочу:python3 итеративно удалять первый символ из строки

for h in content: 
    data = func(h) #returns list 
    for i in range(0,len(h) - 1): 
    tmp = h 
    #remove first letter of string h 
    data.append(func(tmp)) 
    #... 

Как я могу это сделать? так что функция может быть побежала на скажу

func(okay) 
func(kay) 
func(ay) 

в таком порядке

+0

Do вы имеете в виду рекурсивно? –

+1

Обеспечить ввод образца и желаемый выход. –

ответ

4

Вы можете использовать строку сплайсинг (проверить Aaron's Hall's question and the answers для фантастического rundown на обозначениях сращивания). То, что вы пытаетесь сделать, это сращить строку от первого символа до конца, например: a[start:].

Похоже, что вы, возможно, пытаетесь сделать следующее:

while len(content) > 0: 
    func(content) 
    content = content[1:] 
2
return [string[1:] for string in content] 

Пример:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from itertools import permutations 
>>> [string[1:] for string in ["".join(words) for words in permutations("Fig")]] 
['ig', 'gi', 'Fg', 'gF', 'Fi', 'iF'] 
1

Там нет представления для строк в текущих версиях Python, поэтому копирование строк неизбежно. Что вы можете сделать, чтобы избежать сохранения всех суффиксов в памяти, в то же время использовать функцию генератора, или функция, которая возвращает выражение генератора:

# -*- coding: utf-8 -*- 
from __future__ import absolute_import, division, print_function, unicode_literals 


def suffixes(s): 
    for i in range(len(s)): 
     yield s[i:] 


def suffixes2(s): 
    return (s[i:] for i in range(len(s))) 


def func(s): 
    print(s) 


for s in suffixes('okay'): 
    func(s) 

for s in suffixes2('okay'): 
    func(s) 

okay 
kay 
ay 
y 
okay 
kay 
ay 
y 
Смежные вопросы