精确列表比较如何工作?

时间:2018-04-20 18:28:35

标签: python list comparison

我正在编写一个代码,我需要比较两个完全匹配的列表,然后我找到了这个代码(我必须添加print,以便输出结果):

a = [1,2,3,4,5]
b = [9,8,7,6,5]
print [i for i, j in zip(a, b) if i == j]

此代码输出[5]因为它打印列表,如果我将代码更改为

a = [1,2,3,5,4]
b = [9,8,7,6,5]
print [i for i, j in zip(a, b) if i == j]

它输出[],因为列表为空。

这一切都很好,因为它解决了我的列表比较问题,但我几乎不知道为什么或如何工作。如果您有详细或部分解释,我将非常感激。

3 个答案:

答案 0 :(得分:0)

这是一个列表理解,这是一个python语法功能。 You can read about it in the python tutorial here

它与zip()内置函数结合使用。 Documentation for that function is here

a tl; dr是:zip函数从两个列表中生成对,并且列表推导将过滤掉不比较相等的对,仅选择匹配的对

答案 1 :(得分:0)

这被称为“列表理解”,让我们在这里分解:

Require Local 可以大致理解为列出[i for i, j in zip(a, b) if i == j],其中[i](和i)来自j,但仅限zip(a, b) }}

i == j有两个数组,zip(a, b)a,并以最终结果如b

的方式组合它们

如此有效,您正在处理[(1, 9), (2, 8), ...]的结果并迭代元组zip(a, b),仅在i, j为“真实”时返回。解释“truthy”有点超出了这个答案的范围,但在这种情况下,如果i == ji == j具有相同的值,则表达式True将计算为i。即,j5 == 5,其中True5 == 4

答案 2 :(得分:0)

要使代码使用元素的随机索引,您可以尝试以下操作:

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

如果i == j则打印[i for a in a j in b]

这将输出: [5]