【发布时间】:2015-05-19 13:23:59
【问题描述】:
我的目标是让 python 代码允许检测列表是否已排序。
我想了解为什么以下代码返回 True 而不是我预期的猜测 False
l = [1, 2, 3, 4, 1, 6, 7, 8, 7]
all(l[i] <= l[i+1] for i in xrange(len(l)-1)) # return "True"
注意事项:
- 我在 iPython 0.10 中使用 python 2.6.4
- 我使用非常大的列表,所以我宁愿避免
l == l.sort()类型的解决方案
为了理解这一点,我已经阅读(并测试)了以下两个主要帖子中的信息:
编辑: 好吧,显然问题只出现在 iPython 内部,而不是仅使用 python 命令行时!
iPython 0.10
In [93]: l = [1, 2, 3, 4, 1, 6, 7, 8, 7]
In [94]: all(l[i] <= l[i+1] for i in xrange(len(l)-1))
Out[94]: True
python 2.6.4
>>> l = [1, 2, 3, 4, 1, 6, 7, 8, 7]
>>> all(l[i] <= l[i+1] for i in xrange(len(l)-1))
False
【问题讨论】:
-
@Ajay:你能说得更具体点吗?
-
我在 Python 2.6.6 上也得到了 False,无论是 gen exp 版本还是 list comp 版本。我使用 Python 2.5.5 得到了相同的结果。
-
这可能只是扯淡,但您显示的代码既不返回也不打印任何内容。所以如果你在 REPL 之外的任何地方运行它,你不应该看到“True”或其他任何东西。您是否 100% 确定这是正在运行的代码,并且是产生输出的行?
-
对我来说似乎是一个 ipython 错误。最新版本是 3.1。我会尝试升级。
-
print all.__module__显示什么?如果不是__builtin__,则您正在从不同的模块使用它 - 可能是numpy。
标签: python list sorting ipython