Python记录消息“乱序”

时间:2014-01-22 11:32:40

标签: python

如果编写了遍历目录并检查某些内容的脚本。 为简单起见,我们假设我们有目录a到z以及我检查的内容返回Yes或No。

通常它会按遍历顺序打印是或否。

现在假设a到e返回yes,f-h返回no而i-z再次返回yes。现在我想打印这个但是我希望它首先打印返回yes的路径然后返回返回no的路径。所以我们得到:

a - yes
b - yes
... 
e - yes
i - yes
j - yes
...
z - yes
f - no
g - no
h - no

我怎样才能做到最好?

2 个答案:

答案 0 :(得分:0)

试试这个:将yes和no路径放入列表并在末尾打印两个列表....

答案 1 :(得分:0)

如果您可以将数据放入元组或列表的列表中,那么您可以使用内置的sort()方法和自定义的'cmp'函数。 cmp是一种老派,但你的排序很独特,回归它是有道理的。如果您能够更改存储数据的方式,则可以使用更有效的排序算法 - 即使用0而不是'yes'和1而不是'no'。

data = [('a','yes'),('b','yes'),('e','yes'),('g','no'),('z','yes'),('f','no')]

def tuplecmp(a,b):
    if(a[1]==b[1]):
        return cmp(a[0], b[0])
    if(a[1]=='yes'):
        return -1
    return 1

data.sort(cmp=tuplecmp)
print data
[('a', 'yes'), ('b', 'yes'), ('e', 'yes'), ('z', 'yes'), ('f', 'no'), ('g', 'no')]

如何在元组中使用自定义cmp函数有一个非常好的演练:
http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch20s04.html