我有以下几行代码

l1 = [1, 3, 1, 2, 10]
l2 = [2, 1, 10, 5, 5]
ranges = []
[ranges.append(list(range(x, y, 1))) if x < y else
ranges.append(list(range(y, x, -1))) for x, y in zip(l1, l2)]

我希望此代码打印以下内容
[[1], [3, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4], [10, 9, 8, 7, 6]]

相反,我得到了这个
[[1], [], [1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4], []]

我错过了一些明显的东西吗?

最佳答案

您可以在调用范围时动态设置步幅(第三个参数),如下所示:

range(x, y, 1 if x < y else -1)
ranges = []
for x, y in zip(l1, l2):
    ranges.append(list(range(x, y, 1 if x < y else -1)))

ranges
# [[1], [3, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4], [10, 9, 8, 7, 6]]

P.S.,我更喜欢使用循环来解决这个问题,因为我不建议使用列表理解来解决副作用。

关于python - 当第一个参数大于第二个参数时 range() 返回空列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46955479/

10-12 23:23