修改Python中的列表

时间:2013-05-01 22:25:24

标签: python

我的代码是:

>>> 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')时很多:)

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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']

答案 2 :(得分: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']