Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3-列表理解“;如果不在列表中“;_Python_Python 3.x_List Comprehension - Fatal编程技术网

Python3-列表理解“;如果不在列表中“;

Python3-列表理解“;如果不在列表中“;,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我有一个包含不同整数的列表1。 现在,我想创建第二个列表(list2),它包含list1的所有元素,不带双精度。我想创建具有列表理解功能的list2,无需首先将其定义为空列表: list1 = [3,3,2,1,5,6,1,5,7] list2 = [i for i in list1 if i not in list2] print(list2) 我知道,那个箱子对set()很合适。 但是为什么它不能与列表理解一起工作呢 在这些线程中,我发现我的list2语法应该很好: 两个排名靠前的

我有一个包含不同整数的列表1。 现在,我想创建第二个列表(list2),它包含list1的所有元素,不带双精度。我想创建具有列表理解功能的list2,无需首先将其定义为空列表:

list1 = [3,3,2,1,5,6,1,5,7]
list2 = [i for i in list1 if i not in list2]
print(list2)
我知道,那个箱子对set()很合适。 但是为什么它不能与列表理解一起工作呢

在这些线程中,我发现我的list2语法应该很好:

两个排名靠前的答案都提出了如下语法

[y for y in a if y not in b]

我不是100%确定,但我相信在理解完成之前,列表不会完全填充

如果不能使用列表理解,您可以简单地执行此操作

List(Set(list1))
另一个选择(也不是你想要的)


这是因为您正在以自引用的方式定义list2的内容。
虽然在语法上它是正确的,但在语义上它是没有意义的-当您在列表理解的过滤器/保护部分引用它时,列表2还没有定义。

Simple-列表理解在分配给
list2
之前进行评估,所以不可能用列表理解解决这种情况?那么,我的情况与排名靠前的答案中建议的语法之间的差异在哪里呢?这将抛出一个
名称错误
,因为在评估列表理解时,
list2
不存在。更一般地说,您不能在列表理解中引用结果列表,列表理解和其他理解结构不是“循环的一行”,您不应该这样认为。它们用于表示生成新容器或iterable的映射/筛选操作。这是否回答了您的问题?当然,我知道。但我想反驳一下,为什么在我看来,列表理解是不可能的?你检查一下它是否包含在列表2中,但我相信列表2还没有被填充,直到理解完成。再加上@juanpa.arrivillaga的答案,这就是解决方案。现在我明白了我的问题和我在思考上的错误。我应该永远记得写代码,我可以理解,我可以阅读。谢谢刘易斯·莫里斯!如果答案对您有帮助,请不要忘记接受:)这里也提出了类似的问题:当我在使用列表理解之前定义list2时,list2中仍然有两个元素:list1=[3,3,2,1,5,6,1,5,7]list2=[I for I in list1 if I not in list2]print(list2)@laura.neukamp当然,因为创建另一个列表对象不会修改list2,为什么会修改?同样,列表理解是描述映射/过滤操作以生成新列表的声明性构造object@juanpa.arrivillaga:是的!现在我明白了!这是如此合乎逻辑和明确。谢谢你的解释。
list1 = [3,3,2,1,5,6,1,5,7]
list2 = []
for itm in list1:
    if itm not in list2:
        list2.append(itm)