Python:将列表中的字符串与两个不同的列表长度进行比较

时间:2016-11-03 10:21:19

标签: python string list

我有两个包含不同长度字符串的列表。 现在我想检查一个列表中的字符串是否是另一个列表的子字符串 创建一个与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']

2 个答案:

答案 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]