Python 按空格数对列表排序

Python 按空格数对列表排序,python,list,sorting,Python,List,Sorting,我有一个如下所示的文本文件: prefix-56678 4677878 233454 3445567 56566767 4554578 prefix-787856 345456 546 7867856 445456 我想按行中“\t”的数量对行重新排序。 我所做的是: list_of_lines=text.splitlines() list_of_lines.sort(key=len, reverse=True) 但是前缀很长,有时我会出错。我

我有一个如下所示的文本文件:

prefix-56678     4677878     233454
3445567     56566767
4554578    prefix-787856
345456    546    7867856   445456
我想按行中“\t”的数量对行重新排序。 我所做的是:

list_of_lines=text.splitlines()
list_of_lines.sort(key=len, reverse=True) 

但是前缀很长,有时我会出错。我想我应该使用生成器,但无法理解语法,有什么帮助吗?

要按制表符计数对行进行排序,请计数制表符:

list_of_lines.sort(key=lambda l: l.count('\t'), reverse=True)
len()
提供行的总长度。

此处:
list_of_lines=text.splitlines()
list_of_lines.sort(key=lambda(x):len(x.split("\t"))-1, reverse=True)

行的列表=text.splitlines()
对于范围内的ELMNTIDX(len(行列表)):
列出所有行[elmntindx]。拆分(“\t”)
列出所有行。排序(key=len,reverse=True)
编辑:忘记在第3行指定。下面是一个附加部分的修复,该部分将字符串组合回:

行的列表=text.splitlines()
对于范围内的ELMNTIDX(len(行列表)):
行列表[elmntindx]=行列表[elmntindx]。拆分(“\t”)
列出所有行。排序(key=len,reverse=True)
对于范围内的(len(行列表)):
行列表[a]=“\t”。连接(行列表[a])

您是按行长排序,而不是按制表符数排序。你有什么错误?你发布的代码不会引发异常。
key=lambda x:x.count('\t')
前缀有多长?虽然我更喜欢Martijn的
str.count
答案(PS:那家伙是机器人吗?),但你的答案也可以。但是,您不需要从每个值中减去1。只要键函数的相对输出保持不变,绝对值就没有任何意义。这根本不起作用
.split()
不会(也不能!)变异字符串。它返回一个列表。您的代码正在拆分每个字符串,然后丢弃输出。我刚刚忘记分配拆分的内容:/。不过,您可以始终使用“\t”.join()将字符串合并回原来的字符串。谢谢!!我想是时候学习lambda函数了!