微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

排序过程中列表似乎为空

如何解决排序过程中列表似乎为空

listobject.c源代码

/* The list is temporarily made empty, so that mutations performed
 * by comparison functions can't affect the slice of memory we're
 * sorting (allowing mutations during sorting is a core-dump
 * factory, since ob_item may change).
 */

并从Mutable Sequence Types文档中

:在对列表进行排序时,尝试使列表变异甚至检查的效果是不确定的。Python 2.3及更高版本的C实现使列表在整个持续时间内都显示为空,并ValueError在可以检测到列表在排序过程中发生突变的情况下引发该列表。

您可以压缩ab改为:

b[:] = [bval for (aval, bval) in sorted(zip(a, b))]

解决方法

我想就地对列表进行排序,并尝试在排序过程中(key功能内)使用列表本身。我发现列表本身似乎是空的。

a = [1,4,5,3,2,6,0]
b = ['b','e','f','d','c','g','a']
b.sort(key=lambda x: a[b.index(x)])
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "<stdin>",in <lambda>
ValueError: 'b' is not in list

所以我尝试了:

def f(x):
  print "FOO:",x,b
  return b.index(x)

b.sort(key=f)

并得到

FOO: b []
Traceback (most recent call last):
  File "<stdin>",line 3,in f
ValueError: 'b' is not in list

有什么解释吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。