簡體   English   中英

如何用python拆分這個字符串?

[英]How to split this string with python?

我有一些看起來像這個例子的字符串:“AAABBBCDEEEEBBBAA”

字符串中可以包含任何字符。

我想把它分成如下列表:['AAA','BBB','C','D','EEEE','BBB','AA']

因此,相同字符的每個連續延伸都會轉到拆分列表的單獨元素。

我知道我可以迭代字符串中的字符,檢查每個i和i-1對,如果它們包含相同的字符等,但是那里有更簡單的解決方案嗎?

我們可以使用正則表達式:

>>> import re
>>> r = re.compile(r'(.)\1*')
>>> [m.group() for m in r.finditer('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']

或者,我們可以使用itertools.groupby

>>> import itertools
>>> [''.join(g) for k, g in itertools.groupby('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']

timeit顯示Regex更快(對於這個特定的字符串)( Python 2.6Python 3.1 )。 但是Regex畢竟是專門用於字符串的,而groupby是一個通用函數,所以這並不是那么出乎意料。

>>> from itertools import groupby
>>> [''.join(g) for k, g in groupby('AAAABBBCCD')]
['AAAA', 'BBB', 'CC', 'D']

並通過正常的字符串操作

>>> a=[];S="";p=""
>>> s
'AAABBBCDEEEEBBBAA'
>>> for c in s:
...     if c != p: a.append(S);S=""
...     S=S+c
...     p=c
...
>>> a.append(S)
>>> a
['', 'AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
>>> filter(None,a)
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
import itertools
s = "AAABBBCDEEEEBBBAA"
["".join(chars) for _, chars in itertools.groupby(s)]

解決問題的另一種方法:

#!/usr/bin/python

string = 'AAABBBCDEEEEBBBAA'
memory = str()
List = list()
for index, element in enumerate(string):
    if index > 0:
        if string[index] == string[index - 1]:
            memory += string[index]
        else:
            List.append(memory)
            memory = element
    else:
        memory += element

print List

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM