-5

我的代码是:

>>> lis = ['ALRAGUL', 'AKALH', 'to7a']
>>> for i, s in list(enumerate(lis)):   
        if s.startswith('AL'):      
            lis[i:i+1] = ['AL',s[2:]]   
        if s.endswith('H'):             
            lis[i:i+1] =[s[:-1],'H']
>>> lis     
['AL', 'AKAL', 'H', 'AKALH', 'to7a']

但我希望结果变为:

['AL', 'RAGUL', 'AKAL', 'H', 'to7a']

我希望它以某种通用的方式表示代码可以与任何单词以及它们的任何排列一起使用。例如,我希望它'AL'在开始时拆分(),并且我想'H'在任何情况下在结束时拆分(),谢谢 :)

4

3 回答 3

1

像这样使用生成器函数:

lis = ['ALRAGUL','AKALH', "AL", 'H','ALH' ,'to7a','ALRAGULH']

def solve(lis):
    for x in lis:
        if x.startswith("AL") and x.endswith("H"):
            yield x[:2]
            if len(x)>4:
                yield x[2:-1]
            yield x[-1]
        elif x.startswith("AL"):
            yield x[:2]
            if len(x)>2:
                yield x[2:]
        elif x.endswith("H"):
            if len(x)>1:
                yield x[:-1]
            yield x[-1]
        else:
            yield x

new_lis = list(solve(lis))
print new_lis

输出:

['AL', 'RAGUL', 'AKAL', 'H', 'AL', 'H', 'AL', 'H', 'to7a', 'AL', 'RAGUL', 'H']
于 2013-05-01T22:38:09.347 回答
1

只需使用新列表即可。这将防止您遇到索引问题(因为i当您在列表之间插入另一个项目时不会更新):

>>> lis = ['ALRAGUL', 'AKALH', 'to7a']
>>> lisNew = []
>>> for s in lis:
        if s != 'AL' and s.startswith('AL'):
            lisNew.append('AL')
            s = s[2:]
        if s != 'H' and s.endswith('H'):
            lisNew.append(s[:-1])
            lisNew.append('H')
        else:
            lisNew.append(s)
>>> lisNew
['AL', 'RAGUL', 'AKAL', 'H', 'to7a']
于 2013-05-01T22:39:51.833 回答
0

试试这个代码

lis = ['ALRAGUL', 'ALRAGUL', 'AKALH', 'to7a', 'ALRAGULH', 'AL', 'H', 'ALH']
i = 0
for s in list(lis):
    i = lis.index(s, i)
    if s.startswith('AL') and len(s) > 2:
        lis[i:i + 1] = ['AL', s[2:]]
        s = s[2:]
        i += 1

    if s.endswith('H') and len(s) > 1:
        lis[i:i + 1] = [s[:-1], 'H']
        i += 1

print lis # ['AL', 'RAGUL', 'AL', 'RAGUL', 'AKAL', 'H', 'to7a', 'AL', 'RAGUL', 'H', 'AL', 'H', 'AL', 'H']
于 2013-05-01T22:38:01.700 回答