Всем доброго дня.
Если если возможность, помогите со скриптом форматирования строки.
Нужно расставлять точки между буквами в строке.
Допустим у нас есть строка «string»
Нужно создать список строк в формате:
- «strin.g»
- «stri.ng»
- «stri.n.g»
- «str.ing»
- «str.i.ng»
Т.е. перебрать все возможные варианты расставления точек. Точки предположительно будут расположены как при увеличении битового числа…
- «0001»
- «0010»
- «0011»
- «0100»
- «0110»
Анонимный пользователь Изменен статус публикации
def insdot(s): def w(s): if len(s) == 1: return [s] else: return map(lambda x: s[0]+x, w(s[1:])) + map(lambda x: s[0]+'.'+x, w(s[1:])) return w(s)[1:]
Добавлено:
А вот предложенное решение с отображением целых.
def insdot(s): p = 1 << (len(s)-1) l = [] for i in range(1, p): def rf(first, sec): c = first[0] s1 = sec if c & i > 0 : s1 = '.'+s1 return (c >> 1, first[1]+s1) l.append(reduce(rf, s[1:], (p >> 1, s[0]))[1]) return l
Решение одной строчкой:
from itertools import product word = 'string' ['%s'.join(word) % x for x in product(('', '.'), repeat=len(word)-1)] # ['string', 'strin.g', 'stri.ng', 'stri.n.g', 'str.ing', 'str.in.g', 'str.i.ng', 'str.i.n.g', 'st.ring', 'st.rin.g', 'st.ri.ng', 'st.ri.n.g', 'st.r.ing', 'st.r.in.g', 'st.r.i.ng', 'st.r.i.n.g', 's.tring', 's.trin.g', 's.tri.ng', 's.tri.n.g', 's.tr.ing', 's.tr.in.g', 's.tr.i.ng', 's.tr.i.n.g', 's.t.ring', 's.t.rin.g', 's.t.ri.ng', 's.t.ri.n.g', 's.t.r.ing', 's.t.r.in.g', 's.t.r.i.ng', 's.t.r.i.n.g']
Вот за это я и люблю питон