python – 需要对给定的字符串进行排序(首先以x开头的字符串)

当给出[‘mix’,’xyz’,’apple’,’xanadu’,’aardvark’]列表时,代码不返回最后一个单词.

def front_x(words):
    x_list = []
    no_x_list = []
    [x_list.append(i) for i in words if i[0] == "x"]
    [no_x_list.append(words[i2]) for i2 in range(len(words)-1) if words[i2] not in x_list]
    x_list.sort()
    no_x_list.sort()
    return x_list + no_x_list
print front_x(['mix', 'xyz', 'apple', 'xanadu', 'aardvark'])

一定是:

['xanadu', 'xyz', 'aardvark', 'apple', 'mix']

列表[‘bbb’,’ccc’,’axx’,’xzz’,’xaa’]和[‘ccc’,’bbb’,’aaa’,’xcc’,’xaa’]一切都正确[‘ xaa’,’xzz’,’axx’,’bbb’,’ccc’]和[‘xaa’,’xcc’,’aaa’,’bbb’,’ccc’]

最佳答案 迭代范围(len(单词)-1)看起来不正确.更重要的是,使列表理解列表附加是非常单一的; list comps用于构建列表,而不是使列表附加,这在这里具有讽刺意味.

您可以通过基于两元组进行排序来执行排序一次,该元组的第一项检查单词是否以’x’开头并将其放在前面.元组中的第二项在列表中应用了lexicograhical排序,打破了联系:

def front_x(words):
    return sorted(words, key=lambda y: (not y.startswith('x'), y))

print front_x(['mix', 'xyz', 'apple', 'xanadu', 'aardvark'])
# ['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
点赞