Как бы я быть в состоянии взять строку как 'aaaaaaaaaaaaaaaaaaaaaaa'
и разделить его на 4 длины кортежей типа (aaaa
, aaaa
, aaaa
)Разделить строку даже размера куски
ответ
Использование textwrap.wrap
:
>>> import textwrap
>>> s = 'aaaaaaaaaaaaaaaaaaaaaaa'
>>> textwrap.wrap(s, 4)
['aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaa']
Использование списка понимание, выражение генератора:
>>> s = 'aaaaaaaaaaaaaaaaaaaaaaa'
>>> [s[i:i+4] for i in range(0, len(s), 4)]
['aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaa']
>>> tuple(s[i:i+4] for i in range(0, len(s), 4))
('aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaa')
>>> s = 'a bcdefghi j'
>>> tuple(s[i:i+4] for i in range(0, len(s), 4))
('a bc', 'defg', 'hi j')
Другое решение с использованием регулярных выражений:
>>> s = 'aaaaaaaaaaaaaaaaaaaaaaa'
>>> import re
>>> re.findall('[a-z]{4}', s)
['aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa']
>>>
Регулярное выражение немного переборщило для этого. – poke
Владелец просил разрешения, не спрашивая о наиболее оптимальном, поэтому я просто поставил так, как мы можем решить так. неважно, я знаю, что это не лучший в своем роде. –
На самом деле, это действительно приятное решение (кроме регулярных выражений, которые медленнее используются при массовом рассылке) и легче понять с первого взгляда, чем решение 'zip(). И его можно легко изменить для работы с произвольными символами, включая новые строки: 're.findall ('. {4}', s, re.DOTALL)' - Или даже принять неполные хвосты: 're.findall ('. {1 , 4} ', s, re.DOTALL) ' – blubberdiblub
Вы можете использовать grouper recipe, zip(*[iter(s)]*4)
:
In [113]: s = 'aaaaaaaaaaaaaaaaaaaaaaa'
In [114]: [''.join(item) for item in zip(*[iter(s)]*4)]
Out[114]: ['aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa']
Обратите внимание, что textwrap.wrap
не может разделить s
в строки длины 4, если строка содержит пробелы:
In [43]: textwrap.wrap('I am a hat', 4)
Out[43]: ['I am', 'a', 'hat']
окунь рецепт быстрее, чем при использовании textwrap
:
In [115]: import textwrap
In [116]: %timeit [''.join(item) for item in zip(*[iter(s)]*4)]
100000 loops, best of 3: 2.41 µs per loop
In [117]: %timeit textwrap.wrap(s, 4)
10000 loops, best of 3: 32.5 µs per loop
И рецепт окунь может работать с любым итератором, а textwrap
работает только со строками.
Это гений! –
s = 'abcdef'
Нам необходимо разделить на части 2
[s[pos:pos+2] for pos,i in enumerate(list(s)) if pos%2 == 0]
Ответ:
['ab', 'cd', 'ef']
- 1. Разделить строку на куски заданного размера без разрыва слов
- 2. Разделить аудиофайл на куски произвольного размера
- 3. Regex разделить строку на куски размером verying
- 4. Невозможно разделить длинную строку на куски
- 5. Разделить строку на 10kb куски в Go
- 6. Разделить строку на куски одинаковых букв
- 7. Разделить изображение на куски
- 8. Разделить аудиофайлы на куски
- 9. Разделить строку на строку [] определенного размера
- 10. Python: разделить список на куски определенного размера и заполнить остаток
- 11. clojure split string в разные куски размера
- 12. Regex разделить на куски BBCode
- 13. nodejs разделить изображение на куски
- 14. Разделить массив в N Куски
- 15. PHP - Разделить массив на куски.
- 16. Разделить массив на куски X длины
- 17. Разделить вектор на куски в R
- 18. Разделить большую строку на более мелкие куски в C#
- 19. Регулярное выражение, чтобы разделить строку на равные куски длиной
- 20. PHP: Разделить строку на куски 8, как это сделать?
- 21. Пытается разделить струну на куски и наоборот
- 22. Scala: Разделить массив на куски некоторой логикой
- 23. Разделить массив на куски длины N
- 24. Разделить вектор на неравные куски в R
- 25. Список Разделить на куски необходимой длины
- 26. Boost asio - разделить разные куски данных
- 27. как разделить серию слов на «N» куски?
- 28. php - Разделить диапазон дат на куски
- 29. Разделить/разбить файл на куски в J2ME
- 30. Разделить ndarray на куски - при сохранении порядка
для х в х: X = S [0: 4]; S = S [4: ]; print (x) –
связанный: [Что является самым «питоновым» способом перебора списка в кусках?] (http://stackoverflow.com/q/434287/4279) – jfs