按字符串长度不工作排序字符串列表

时间:2014-03-18 22:35:33

标签: python string list sorting

我想知道为什么我的字符串列表没有正确排序。我键入一个4字的句子,然后它被置换了24次,然后我希望它对这些句子进行排序。除非我使用

def my4sort(alist): #sorts the list of strings
  return(sorted(alist, key=len))
  

排列0:'鲍勃正在编程很多'当排序时给出' bob是编程批次'

     

排列1:'鲍勃是很多编程'当排序时给出'鲍勃是很多编程'

     

排列2:' bob编程很多'当排序时给出' bob编程很多'

     

排列3:' bob编程地段是'当排序时给出' bob编程地段是'

     

排列4:' bob lot是编程'当排序时给出' bob lot是编程'

     

排列5:' bob lot编程是'当排序时给出' bob lot编程是'

     

排列6:'鲍勃编程很多'当排序时给出'是bob编程批次'

     

排列7:'是bob lot编程'当排序时给出'是bob lot编程'

     

排列8:'编程bob lot'当排序时给出'编程bob lot'

     

排列9:'编程很多bob'当排序时给出'编程很多bob'

     

排列10:'很多bob编程'当排序时给出'很多bob编程'

这是我得到的输出,你可以看到它是对的

这是我的排列代码

def permutations(liststring): #permutes the list of strings
    if not liststring:
        return ['']
    ret = []
    for i, d in enumerate(liststring):
        perms = permutations(liststring[:i] + liststring[i+1:])
        for perm in perms:
            ret.append(d + ' ' + perm)      
    return ret

3 个答案:

答案 0 :(得分:2)

如果您尝试在字符串列表中对每个字符串的单词进行排序,则需要根据每个字符串而不是字符串列表在列表上调用sorted。例如:

def shortStringsByWordLengths(sentences):
    return [' '.join(sorted(sentence.split(), key=len)) for sentence in sentences]

在此代码中,我基于拆分,排序,然后重新加入每个单独的句子来创建新列表。 split获取字符串并将其转换为由空格分隔的单词列表(即'hello world!'变为['hello', 'world!']sorted按长度对该列表进行排序,并将其重新组合在一起有空格。

根据您的评论,您希望它按最长排序排序,在这种情况下,您需要将reverse=True添加到sorted,使其如下所示:

def shortStringsByWordLengths(sentences):
    return [' '.join(sorted(sentence.split(), key=len, reverse=True)) for sentence in sentences]

答案 1 :(得分:1)

您尝试做的似乎是对整列的置换字符串进行排序。在排序之后,它们的长度是否相同,因为您只需重新排列单词?如果您想单独对每个字符串进行排序,首先需要将其拆分为单个单词以进行比较。

sorted("bob lots programming is".split(), key=len)
['is', 'bob', 'lots', 'programming']

答案 2 :(得分:1)

Rob Watts的解决方案已转移到您的职能部门:

def my4sort(alist): #sorts the list of strings
  return [" ".join(sorted(permutation.split(),key=len,reverse=True))  for permutation in alist]
alist=["this is sparta","sparta this is","is this sparta"]
print mysort4sort(alist)
# gives ['sparta this is', 'sparta this is', 'sparta this is']