排序顺序的字符串,除了将所有以'x'开头的字符串分组

Ash*_*r S 5 python

给定一个字符串列表,返回一个包含排序顺序的字符串的列表,除了将所有以'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)
Run Code Online (Sandbox Code Playgroud)

只要两个以x开头的列表元素组合在一起,此代码就可以正常工作.即我得到列表a1的正确输出但不是为了你可以帮我理解为什么!


获得输出.

['xzz', 'axx', 'bbb', 'ccc', 'xaa']
['xanadu', 'xyz', 'xz', 'aardvark', 'apple', 'mix'] 
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 7

您可以使用sortedlist.sort使用两个键:

l = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
sorted(l, key=lambda x: (not x.startswith('x'), x))
['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
Run Code Online (Sandbox Code Playgroud)

哪里not x.startswith('x')的回报bool,它得到的排序False第一.因此,not x.startswith('x')抓住以'x'开头的strs并将它们带到前面.


Dir*_*Bit 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)
Run Code Online (Sandbox Code Playgroud)

输出:

['xaa', 'xzz', 'axx', 'bbb', 'ccc']
['xanadu', 'xyz', 'xz', 'aardvark', 'apple', 'mix']
Run Code Online (Sandbox Code Playgroud)