![](/img/trans.png)
[英]Extract the sub elements >=2 into another list and delete them from the nested list
[英]Simple way to delete nested (list of 2 elements) from a list?
我有一个input_list = [[1,2],[1,3],[1,4],[2,8],[2,10]]
然后我有一个elimination_list = [[1,2],[2,8]]
然后,我用输入列表中的元组创建一个result_list
,但在exclude_list中找到的元组除外
因此result_list = [[1,3],[1,4],[2,10]]
我可以通过如下所示的多个for循环来实现这一点,但是有什么办法可以用更少的代码行做到这一点?
for x,y in input_list:
is_eliminate = 0
for a,b in elimination_list:
if x == a and y == b:
is_eliminate = 1
if is_eliminate == 0:
result_list.append([x,y])
您可以只使用遏制测试( in
)和列表理解:
result_list = [t for t in input_list if t not in elimination_list]
t not in elimination_list
否定遏制测试中的t not in elimination_list
将遍历所有elimination_list
供您查看元素是否存在。
如果您可以将列表转换为实际具有元组,则可以使用set成员资格测试的更快选项:
input_list = [(1, 2), (1, 3), (1, 4), (2, 8), (2, 10)]
elimination_set = {(1, 2), (2, 8)}
result_list = [t for t in input_list if t not in elimination_set]
在这里, eliminitaion_set
是一个包含元组(不可变序列)的集合,而eliminitaion_set
中的t not in elimination_set
使用哈希算法来确定任何给定的元组是否是平均O(1)(恒定)时间的成员。
您不必转换input_list
到元组,虽然; 您可以仅在测试时进行转换:
input_list = [[1, 2], [1, 3], [1, 4], [2, 8], [2, 10]]
elimination_set = {(1, 2), (2, 8)}
result_list = [t for t in input_list if tuple(t) not in elimination_set]
您可以对条件使用列表理解:
result_list = [t for t in input_list if t not in elimination_list]
对于较大的列表,可以使用set
来更快地消除:
elimination_set = set((tuple(x) for x in elimination_list))
result_list = [t for t in input_list if tuple(t) not in elimination_set]
功能样式相同的两个解决方案:
result_list = filter(lambda t: t not in elimination_list, input_list)
要么:
elimination_set = set(map(lambda x: tuple(x), elimination_list))
result_list = filter(lambda t: t not in elimination_set, input_list)
只需使用filter
和in
:
result = filter(lambda x: x not in elimination_list, input_list)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.