在给定['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']
答案 0 :(得分:3)
range(len(words)-1)
上的迭代看起来不正确。更重要的是,使用列表理解进行列表追加非常 unpythonic ; 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']
答案 1 :(得分:2)
只需从range(len(words)-1)
中删除-1
这将是代码中的最小变化。
答案 2 :(得分:1)
你可以试试这个:
words = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
new_words = [i for i in words if i[0].lower() == "x"]
words = [i for i in words if i[0].lower() != "x"]
final_words = sorted(new_words)+sorted(words)
print(final_words)
输出:
['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
答案 3 :(得分:1)
您必须使用Liquid Exception: failed to allocate memory in <file>
代替Liquid Exception: string sizes too big in <file>
jekyll 3.4.5 | Error: string sizes too big
才能获得预期的输出。
所以,试试这个:
len(words)
输出:
len(words)-1