gpt4 book ai didi

python - 使用列表理解过滤二元素子列表的列表

转载 作者:行者123 更新时间:2023-12-01 01:31:43 26 4
gpt4 key购买 nike

我有一个列表列表

input = [[2,13],[5,3],[10,8],[13,4],[15,0],[17,10],[20,5],[25,9],[28,7],[31,0]]

我想编写一个列表理解,对于上面的 [a,b] 对,我得到 b > a 对。在上面的示例中,该值为 [2,13]

我的尝试

x = [[item[i],[j]] for item in inputArray if j>i]

产生一个NameError

NameError: name 'j' is not defined`

最佳答案

您尝试的问题在于您从未告诉 Python ij 应该是什么。如果没有该信息,则无法计算检查j > i,并且无法构建列表[item[i],[j]]

您可以发布

>>> inp = [[2,13],[5,3],[10,8],[13,4],[15,0],[17,10],[20,5],[25,9],[28,7],[31,0]]
>>> [[a, b] for a, b in inp if b > a]
[[2, 13]]

此解决方案不会产生 NameError,因为 for a, b in inp 告诉 Python 迭代 inp 的元素(两个 -元素子列表),并在每次迭代中将名称 a 分配给子列表的第一个元素,将名称 b 分配给第二个元素。

我使用名称 inp 而不是 input,因为后者已被内置函数用于获取用户输入。

列表理解的解释

理解相当于

>>> result = []
>>> for a, b in inp:
... if b > a:
... result.append([a, b])
...
>>> result
[[2, 13]]

inp 中的每个二元素列表都被解包到变量 ab 中。如果过滤条件b > aTrue,则构建列表[a, b]并将其包含在最终结果中。

如果您不想使用解包,您还可以像这样索引到 inp 的子列表:

>>> [sub[:] for sub in inp if sub[1] > sub[0]]
[[2, 13]]

通过 sub[:] 获取 sub 的完整切片可确保与迄今为止提供的其他解决方案一样,过滤结果存储子列表的(浅)副本inp。如果不需要复制,可以省略[:]

此代码不会产生 NameError,因为 for sub in inp 告诉 Python 迭代 inp 并在每次迭代中分配名称 sub 到下一个子列表。此外,索引还使用显式数字(01)。

我个人更喜欢拆包的解决方案。即使 inp 的元素不支持索引,而是可以从中提取两个元素的可迭代对象,它也更易于阅读和运行。

关于python - 使用列表理解过滤二元素子列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52801980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com