首页 > 解决方案 > 列出理解遗漏值

问题描述

我的列表理解代码有点麻烦。给定一个由不同整数组成的有序列表 X 和类似列表 Y,构造所有对 (x,y) 的列表,使得 x 来自 X,y 来自 Y,并且 x < y。必须对结果列表进行排序,以使 x 较小的对先行,在 x 相同的对中,y 较小的对先行(参见测试用例中的示例)。

例如:输入--> 3 4 5 6 7;1 2 3 4 5 输出:3 4 3 5 4 5

Xstrs = input().split(' ')
X = [int(x) for x in Xstrs]

Ystrs = input().split(' ')
Y = [int(x) for x in Ystrs]

Z = [(x,y) for x in Xstrs for y in Ystrs  if x < y] #insert a list comprehension expression

for pair in Z: print(pair[0], pair[1])

当我放入这些列表时,上面的代码完全可以接受:

1 2 3 4 5 6 7 4 5 6 7 8 9 10

在这种情况下,在 1 个组合之后(即 (1,4)(1,5) 等),它总是会忽略与 10 的组合。例如:它会忽略 (2,10) (3,10) 等等向前。有人可以向我解释为什么会发生这种情况吗?

标签: pythonlist-comprehension

解决方案


发生这种情况是因为您在列表理解中循环遍历 Xstrs 和 Ystrs,并且因为它们是字符串,所以 '2' 被认为大于 '10'

只需更改此行:

Z = [(x,y) for x in Xstrs for y in Ystrs  if x < y]

对此

Z = [(x,y) for x in X for y in Y  if x < y]

推荐阅读