我有以下列表,并且我正在删除所有不包含sl[0]
或sl[1]
子列表的列表:
l = [
['s1', 's5', 's6', 's8', 's10', 's5', 's15', 's23'],
['s1', 's5', 's8', 's10', 's5', 's6', 's8', 's15', 's23'],
['s1', 's5', 's6', 's10', 's14', 's15', 's23']
]
sl = [['s5','s6','s8'],['s15', 's23']]
此代码为2个子列表sl[0]
和sl[1]
硬编码:
list(filter(lambda l : not(set(sl[0]+sl[1])-set(l)), l))
如何使此代码更灵活?如果sl
包含5个或10个或任何其他数量的子列表怎么办
您可以使用
more-itertools
包来实现这一点。您需要在l
的每个元素中检查len(sl[i])
的每个子序列。这将是缓慢的,但可行的我还创建了一个使用
partial
的工厂函数,这样您就可以随意插入sl
的内容。这与filter
的使用保持一致我很难读懂你的代码:
首先连接
s1[0]
和sl[1]
:然后从
sl[0]+sl[1]
….set(sl[0]+sl[1])
建立一个集合:然后从结果中减去
set(l)
。这甚至行不通,因为l
是一个列表列表。字符串列表可以转换为一个集合,因为集合的元素可以是字符串。但是,列表不能是集合的元素相关问题 更多 >
编程相关推荐