我有一个input_list = [[1,2],[1,3],[1,4],[2,8],[2,10]]
然后我有一个elimination_list = [[1,2],[2,8]]
然后,我创建一个result_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
)和列表理解:t not in elimination_list
阴性包含测试将在所有elimination_list
上循环,以查看元素是否存在如果可以将列表转换为实际的元组,则可以使用设置成员资格测试的更快选项:
这里
eliminitaion_set
是一个包含元组(不可变序列)的集合,t not in elimination_set
使用散列算法来确定任何给定的元组在平均O(1)(常数)时间内是否是成员不过,您没有将
input_list
转换为元组的;仅在测试时,您可以进行转换:您可以在条件下使用列表理解:
对于较大的列表,您可以使用
set
更快地消除:功能风格相同的两种解决方案:
或:
只需使用
filter
和in
:相关问题 更多 >
编程相关推荐