内容简介:http://stackoverflow.com/questions/22678141/python-accessing-the-list-while-being-sorted
我可以在list.sort()中 排序 列表时访问它
b = ['b', 'e', 'f', 'd', 'c', 'g', 'a'] f = 'check this' def m(i): print i, b, f return None b.sort(key=m) print b
这返回
b [] check this e [] check this f [] check this d [] check this c [] check this g [] check this a [] check this
请注意,列表b的各个项目被发送到函数m.但是在列表b为空的情况下,可以看到变量f与列表b的范围相同.为什么函数m打印b为[]?
看看 source code
(CPython,可能是其他实现的不同行为)脚本的奇怪输出变得明显:
/* 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). */ saved_ob_size = Py_SIZE(self); saved_ob_item = self->ob_item; saved_allocated = self->allocated; Py_SIZE(self) = 0;
评论说这一切:当你开始排序,列表被清空.那么在外部观察者的眼中,它是“空的”.
我非常喜欢“core-dump工厂”一词.
比较:
b = ['b','e','f','d','c','g','a'] f = 'check this' def m(i): print i, b, f return None b = sorted(b, key= m) print b
http://stackoverflow.com/questions/22678141/python-accessing-the-list-while-being-sorted
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序
- 排序算法下——桶排序、计数排序和基数排序
- 算法之常见排序算法-冒泡排序、归并排序、快速排序
- 【JS面试向】选择排序、桶排序、冒泡排序和快速排序简介
- 计数排序vs基数排序vs桶排序
- 排序算法--冒泡排序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。