如果 else 在列表推导式 python 中使用“not in”

If else use "not in" in list comprehension python

提问人:Prectux 提问时间:10/31/2023 更新时间:10/31/2023 访问量:67

问:

我想了解如果我使用以下代码,为什么这种公式会起作用的动机:

a = [2,4,6,8]
b = [2,5,6,9]

list_same = [a[i] for i in range(len(a)) if a[i] in b]
list_dif = [b[i] for i in range(len(a)) if b[i] not in a] 
list_dif1 = [lista_dif.append(a[i]) for i in range(len(a)) if a[i] not in b]

如果我使用其他代码,则不起作用:

list_dif = [b[i] if b[i] not in a 
                else a[i] if a[i] not in b
                for i in range(len(a))]

谁能告诉我错误在哪里? 谢谢

python 列表 列表推导

评论

3赞 deceze 10/31/2023
第一个是过滤列表推导式,仅在通过测试时才添加一个值。第二个总是添加一个值,你只是用表达式确定什么值。..if..else..
2赞 Jean-François Fabre 10/31/2023
你真的应该为此使用集
2赞 John Gordon 10/31/2023
如果您准确地解释“这个有效”和“这个不起作用”的意思,那将会有所帮助。
1赞 chepner 10/31/2023
您正在尝试嵌套两个条件表达式(与列表推导无关),并且嵌套表达式缺少其部分。else
0赞 JNevill 10/31/2023
我写了一个答案,但已经删除了。你的代码很奇怪,而且是错误的,这是一个更大的问题,然后回答为什么它们不同。第二个“不同”示例不会没有错误地运行。请提供一个最小的可重复示例,并分享您正在比较的两个变量。

答:

2赞 chepner 10/31/2023 #1

条件表达式始终需要“if”部分和“else”部分:

V1 if C else V2

在代码中,您使用了另一个条件表达式 ,但省略了该部分。V2else

V1 if C1 else (V2 if C2 else V3)

(括号可能会被删除,但为了清楚起见,我在这里使用了它们。您的代码读取 ,缺少 。如果 和 都为 false,则必须指定要使用的值。V1 if C1 else V2 if C2else V3C1C2

此外,不要将列表推导的筛选器部分与条件表达式混淆。除了关键字的共同使用之外,它们几乎没有共同点。if

评论

0赞 Prectux 10/31/2023
问题是没有第三种选择
1赞 chepner 10/31/2023
如果没有第三个选项,则不能使用条件表达式。对于生成器中被 final 子句过滤的每个值,列表推导式必须有要添加到列表中的内容。if
0赞 Prectux 10/31/2023
chepner 好的,谢谢,现在我明白了