我有两个包含不同长度字符串的列表。 现在我想检查一个列表中的字符串是否是另一个列表的子字符串 创建一个与string_list长度相同的新列表。
string_list = ['expensive phone', 'big house', 'shiny key', 'wooden door']
substring_list = ['phone','door']
到目前为止我做了什么
newlist=[]
for i in string_list:
for j in substring_list:
if i in j:
newlist.append(j)
print newlist
所以它给了我
newlist = ['phone', 'door']
但我想要实现的是一个列表如下
newlist = ['phone', '-', '-', 'door']
答案 0 :(得分:0)
for
个循环可以占用else
块。您可以使用此else
块在未找到字符串的情况下附加'-'
:
newlist=[]
for i in string_list:
for j in substring_list:
if j in i:
newlist.append(j)
break
else:
newlist.append('-')
print(newlist)
# ['phone', '-', '-', 'door']
如果您希望结果与第一个列表的长度相同,则需要在if
中放置一个中断,以便在其中一个字符串中包含这两个项目时(例如'expensive phone door'
),你不会做两个会使结果列表长度偏斜的附加。
break
还可确保在找到项目时不会执行else
的{{1}}块。
答案 1 :(得分:-1)
一个简单的改变解决了这个问题:
newlist=[]
for i in string_list:
found = False
for j in substring_list:
if j in i:
found = j
break
if found:
newlist.append(found)
else:
newlist.append("-")
print newlist
(稍微)更多的Pythonic解决方案将是:
newlist = [[j for j in substring_list if j in i][0] if any(j in i for j in substring_list) else "-" for i in string_list]