如何基于列表中的元素拆分字符串

时间:2018-03-20 20:09:30

标签: python string list

statuses = ['421-A','421-G','ARTICLE 11','ARTICLES 14 & 15',
            'COOP/CONDO PLAN FILE','EVICT COOP/CONDO', 'GARDEN COMPLEX'
            'J-51','NON-EVICT COOP/CONDO','ROOMING HOUSE','SEC 608']

snip = [('11201', '131', 'MULTIPLE DWELLING A', '421-A ARTICLE 11', '291', '45')]

我文件的每一行看起来都像snip。我有一个状态列表,其中一些包含空格。

我想查看状态,如果我在snip[0][3]中看到它们,请相应地拆分字符串。 snip[0][3]可能是空字符串(''),但此处列出的状态不超过三种。

所以它目前说的是:'421-A ARTICLE 11'。我希望它显示为'421-A''ARTICLE 11'。这将扩展snip的长度,并且可以。

我使用map尝试了ziplambdaany()和列表推导。我觉得我很接近,有一个优雅的解决方案,但找不到它。我试图避免使用正则表达式,但如果需要它,那很好。

更新:

现在的代码似乎非常接近我现在已经改变了#sn;'列表而不是元组。

snip = ['11201', '131', 'MULTIPLE DWELLING A', '421-A ARTICLE 11', '291', '45']
status_break = [s for s in statuses if s in snip[3]]
newline = snip[:3] + status_break + snip[4:]
print(newline)

1 个答案:

答案 0 :(得分:1)

[s for s in statuses if s in snip[0][3]]

使用正则表达式:

import re
statuses = ['421-A','421-G','ARTICLE 11','ARTICLES 14 & 15',
            'COOP/CONDO PLAN FILE','EVICT COOP/CONDO', 'GARDEN COMPLEX'
            'J-51','NON-EVICT COOP/CONDO','ROOMING HOUSE','SEC 608']

snip = ' '.join(statuses)
statuses_re =  map(lambda s : (s,re.compile('(^| )%s($| )' % s)),statuses)
print([s[0] for s in statuses_re if s[1].search(snip)])

但是如果你有类似“花园复合体”,“花园复合体1”,“花园复合体2”和“花园复合体2”这样的状态。它不起作用