为什么列表理解不能过滤掉重复项?

oct*_*bus 5 python list-comprehension list filter duplicates

我有一个解决方法来解决以下问题.该解决方法将是一个for循环,其中包含一个包含在输出中的测试,如下所示:

#!/usr/bin/env python

def rem_dup(dup_list):
    reduced_list = []
    for val in dup_list:
        if val in reduced_list:
            continue
        else:
            reduced_list.append(val)

    return reduced_list
Run Code Online (Sandbox Code Playgroud)

我问下面的问题,因为我很想知道是否有列表理解解决方案.

鉴于以下数据:

reduced_vals = []
vals = [1, 2, 3, 3, 2, 2, 4, 5, 5, 0, 0]
Run Code Online (Sandbox Code Playgroud)

为什么

reduced_vals = = [x for x in vals if x not in reduced_vals]
Run Code Online (Sandbox Code Playgroud)

产生相同的清单?

>>> reduced_vals
[1, 2, 3, 3, 2, 2, 4, 5, 5, 0, 0]
Run Code Online (Sandbox Code Playgroud)

我认为它与检查output(reduced_vals)作为列表赋值的一部分有关.我很好奇,但确切的原因.

谢谢.

Sve*_*ach 6

列表推导创建新列表,同时reduced_vals在评估列表推导期间始终指向空列表.

Python中赋值的语义是:评估右侧并将结果对象绑定到左侧的名称.对裸名称的赋值永远不会改变任何对象.

顺便说一下,您应该以有效的方式使用set()collections.OrderedDict.fromkeys()删除重复项(取决于您是否需要保留顺序).

  • @octopusgrabbus:那不是Python 2.7.请参见http://ideone.com/FV2OL (2认同)