给出一个字符串列表,返回一个按排序顺序排列的字符串列表,但首先将所有以'x'开头的字符串分组。
例如
['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
收益
['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
。
a=['bbb', 'ccc', 'axx', 'xzz', 'xaa']
a1=['mix', 'xyz','apple', 'xanadu', 'aardvark','xz']
xlist=[]
def sort(s):
for i in s:
if i[0]=='x':
xlist.append(i)
s.remove(i)
print sorted(xlist)+sorted(s)
del xlist[:]
sort(a)
sort(a1)
只要两个以x开头的列表元素不在一起,此代码就可以工作。 即我为列表a1获得了正确的输出,但没有为列表a提供的输出,您能帮我理解为什么吗!
获得输出。
['xzz', 'axx', 'bbb', 'ccc', 'xaa']
['xanadu', 'xyz', 'xz', 'aardvark', 'apple', 'mix']
答案 0 :(得分:7)
您可以通过两个键使用sorted
或list.sort
:
l = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
sorted(l, key=lambda x: (not x.startswith('x'), x))
['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
其中not x.startswith('x')
返回bool
,它首先在False
中排序。因此,not x.startswith('x')
抓取以'x'开头的字符串,并将其带到最前面。
答案 1 :(得分:5)
您不应在遍历列表时将其从列表中删除,请尝试使用深层副本进行操作:
a=['bbb', 'ccc', 'axx', 'xzz', 'xaa']
a1=['mix', 'xyz','apple', 'xanadu', 'aardvark','xz']
xlist=[]
def sort(s):
for elem in s[:]:
if elem.startswith('x'):
xlist.append(elem)
s.remove(elem)
print(sorted(xlist)+sorted(s))
del xlist[:]
sort(a)
sort(a1)
输出:
['xaa', 'xzz', 'axx', 'bbb', 'ccc']
['xanadu', 'xyz', 'xz', 'aardvark', 'apple', 'mix']