-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')したいし、どんな条件でも最後に来るときはいつでも分割()したい thx alot :)

4

3 に答える 3

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 に答える
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 に答える
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 に答える