我正在想办法从2D列表中删除重复项。例如:
x= [[1,2], [3,2]]
我想要结果:
^{pr2}$按这个顺序。在
实际上,我不明白为什么我的代码没有做到这一点:
def removeDuplicates(listNumbers):
finalList=[]
finalList=[number for numbers in listNumbers for number in numbers if number not in finalList]
return finalList
如果我用嵌套for循环的形式写它,它看起来应该是一样的
def removeDuplicates(listNumbers):
finalList=[]
for numbers in listNumbers:
for number in numbers:
if number not in finalList:
finalList.append(number)
return finalList
“问题”是这段代码运行得非常完美。第二个问题是顺序很重要。谢谢
首先将
finalList
声明为空列表,因此将一直
False
。在作业开始前,你的理解能力的右侧将被评估。在
迭代迭代器
^{pr2}$chain.from_iterable
提供给您并以通常的方式删除重复项:进一步阅读:How do you remove duplicates from a list in Python whilst preserving order?
编辑:
您不需要导入来展开列表,您可以使用生成器
而不是
chain.from_iterable(x)
。在finalList
在您的列表理解中始终是一个空的列表,即使您认为它是在此期间附加到它的,这与第二个代码(双for
循环)的情况不同。在我要做的是使用
set
:编辑: 另一方面,如果订单很重要,并接近您的尝试:
^{pr2}$或者
编辑2: 正如timgeb所提到的,显然
map
&;filter
将丢弃那些最终无用的列表,它们消耗内存。因此,我将使用nested for
循环,就像您在上一个代码示例中所做的那样,但是如果您希望使用列表理解方法,那么:在将列表理解的结果分配给finalList之前,首先对右侧的表达式进行求值。 而在第二种方法中,每次迭代之间都要写这个列表。这就是区别。在
这可能与手册在for循环中写入迭代iterable时警告意外行为的注意事项类似。在
您可以使用内置的
set()
-方法来删除重复项(之前必须在列表中执行flatten()
)相关问题 更多 >
编程相关推荐