我正在编写一个代码,我需要比较两个完全匹配的列表,然后我找到了这个代码(我必须添加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]
它输出[]
,因为列表为空。
这一切都很好,因为它解决了我的列表比较问题,但我几乎不知道为什么或如何工作。如果您有详细或部分解释,我将非常感激。
答案 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 == j
和i == j
具有相同的值,则表达式True
将计算为i
。即,j
为5 == 5
,其中True
为5 == 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]