我的代码是:
>>> 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'
)时很多:)
答案 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']