我有一个 input_list = [[1,2],[1,3],[1,4],[2,8],[2,10]]
然后我有一个 elimination_list = [[1,2],[2,8]]
然后我用输入列表的元组创建一个result_list
,除了那些在 elimination_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
负遏制测试将遍历整个 elimination_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 t not in elimination_set]
这里 eliminitaion_set
是一个包含元组(不可变序列)的集合,不在 eliminitaion_set 中的 t
使用散列算法来确定任何给定的元组是否是平均 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]
关于python - 从列表中删除嵌套(2个元素的列表)的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32166334/