生成不在字符串列表中的子字符串列表

时间:2017-03-13 15:24:27

标签: python string list

我有一个字符串列表和一个子串列表。我想生成一个不在字符串列表中的子字符串列表。

substring_list=["100", "101", "102", "104", "105"]
string_list=["101 foo", "102 bar", "103 baz", "104 lorem"]

我尝试new_list = [s for s in substring_list if s not in [i for i in string_list]],但这不起作用。我也尝试了any()的各种用法,但没有运气。

我想返回new_list=["100", "105"]

3 个答案:

答案 0 :(得分:5)

你可以试试这个:

[sub for sub in substring_list if all(sub not in s for s in string_list)]
# ['100', '105']

或者:

[sub for sub in substring_list if not any(sub in s for s in string_list)]
# ['100', '105']

答案 1 :(得分:1)

来自Ruby背景,由于Python有anyall,我找了一个none函数或方法,但很惊讶它看起来并不存在。< / p>

如果您经常使用not anyall not,定义none()可能会很有趣:

def none(iterable):
    for element in iterable:
        if element:
            return False
    return True

substring_list = ["100", "101", "102", "104", "105"]
string_list = ["101 foo", "102 bar", "103 baz", "104 lorem"]

print([sub for sub in substring_list if none(sub in s for s in string_list)])
# ['100', '105']

但可能会导致与None混淆。这可能是它不存在的原因。

答案 2 :(得分:-1)

编写的代码返回全部因为“for i in string_list”创建一个新的相同的string_list数组解决它是拆分方便拆分器官以使string_list受益然后当你启动i [0]时你创建类似的string_list系统但只包含数字没有字母

<强>所以

new_list = [s for s in substring_list if s not in [i.split()[0] for i in string_list]]