Python中列表列表中的字符串操作
我有一个包含数百个子列表的列表。该列表来自数据库表,子列表是该表的行,因此子列表都具有相同数量的条目,并且条目的格式与相应子列表中的相同。以下是一个例子:Python中列表列表中的字符串操作,python,python-2.7,Python,Python 2.7,我有一个包含数百个子列表的列表。该列表来自数据库表,子列表是该表的行,因此子列表都具有相同数量的条目,并且条目的格式与相应子列表中的相同。以下是一个例子: persons = [['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21-0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9/30-6', 'Green']] ...etc 如何编辑所有第5个字段以删除任何“-”和“/”符号 删除不
persons = [['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21-0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9/30-6', 'Green']] ...etc
如何编辑所有第5个字段以删除任何“-”和“/”符号
删除不需要的标志后,我如何创建一个包含所有人员信息的新列表,其中1)第5个字段最后一个数字是4,2)第6个字段颜色是“蓝色”?要删除
-
和/
,可以执行以下操作:
persons = [['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21-0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9/30-6', 'Green']]
for i in persons:
i[4] = i[4].replace('-','').replace('/','')
print persons
[OUTPUT]
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '210049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9306', 'Green']]
b = [x for x in persons if x[4][-2] == '4' and x[5]=='Blue']
对于第二个问题,您可以:
persons = [['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21-0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9/30-6', 'Green']]
for i in persons:
i[4] = i[4].replace('-','').replace('/','')
print persons
[OUTPUT]
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '210049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9306', 'Green']]
b = [x for x in persons if x[4][-2] == '4' and x[5]=='Blue']
简单:
for i in range(len(persons)):
persons[i][4] = persons[i][4].replace('-', '').replace('/', '')
或
然后
及
答案是列表理解
persons = [p[:4]+[p[4].replace('-','').replace('/',''),p[5]] for p in persons]
p4 = [p for p in persons if p[4][-2]=='4']
pblue = [p for p in persons if p[5]=='Blue']
考虑以下几点:
persons = [
['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21-0049', 'Green'],
['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9/30-6', 'Green'],
]
clean1 = [[aa, bb, cc, dd, ee.replace('/','').replace('-',''), ff] for [aa, bb, cc, dd, ee, ff] in persons]
def clean(ins):
outs = ins
outs = outs.replace('/', '')
outs = outs.replace('-', '')
return outs
clean2 = [[aa, bb, cc, dd, clean(ee), ff] for [aa, bb, cc, dd, ee, ff] in persons]
print clean1
print clean2
def modify1(s):
e = list(s)
e[-2] = '4'
return ''.join(e)
modified1 = [[aa, bb, cc, dd, modify1(ee), 'Blue'] for [aa, bb, cc, dd, ee, ff] in clean1]
def modify2(s):
return s[:-2] + '4' + s[-1]
modified2 = [[aa, bb, cc, dd, modify2(ee), 'Blue'] for [aa, bb, cc, dd, ee, ff] in clean1]
print modified1
print modified2
输出:
# persons
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21-0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9/30-6', 'Green']]
# clean
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 30 6', 'Green']]
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 30 6', 'Green']]
# modified
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Blue'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 3046', 'Blue']]
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Blue'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 3046', 'Blue']]
所有的方法都是简单的列表理解,根据您的具体要求考虑不同的选项。
# persons
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21-0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9/30-6', 'Green']]
# clean
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 30 6', 'Green']]
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Green'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 30 6', 'Green']]
# modified
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Blue'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 3046', 'Blue']]
[['2014-2-20', 'Ivan', 'Jones', 'Moscow', '21 0049', 'Blue'], ['2014-1-12', 'Mike', 'Dyson', 'Glasgow', '9 3046', 'Blue']]