我有一个字符串列表和一个子串列表。我想生成一个不在字符串列表中的子字符串列表。
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"]
。
答案 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有any
和all
,我找了一个none
函数或方法,但很惊讶它看起来并不存在。< / p>
如果您经常使用not any
或all 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]]