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
尝试了zip
,lambda
,any()
和列表推导。我觉得我很接近,有一个优雅的解决方案,但找不到它。我试图避免使用正则表达式,但如果需要它,那很好。
更新:
现在的代码似乎非常接近我现在已经改变了#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)
答案 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”这样的状态。它不起作用