按排序顺序排列的字符串,但将以“x”开头的所有字符串分组

2024-06-11 19:02:11 发布

您现在位置: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)

只要两个以x开头的列表元素不在一起,这段代码就可以工作。 i、 我得到了列表a1的正确输出,而不是a的输出,你能帮我理解为什么吗!在


获得输出。在

^{pr2}$

Tags: 字符串apple列表排序a1sortsortedbbb
2条回答

您可以将sorted或{}与两个键一起使用:

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)

输出

^{pr2}$

相关问题 更多 >