按排序顺序排列的字符串,但首先以"x"开头的所有字符串分组除外



给定一个字符串列表,返回一个按排序顺序排列字符串的列表,除了将所有以"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'] 

您可以将sortedlist.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"开头的str并将它们带到前面。

您不应该在迭代时从列表中删除它,请尝试使用深层副本:

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']

最新更新