Python2.7排序列表
我如何对这个列表进行排序,使所有不以“某物”开头的内容都位于列表顶部Python2.7排序列表,python,Python,我如何对这个列表进行排序,使所有不以“某物”开头的内容都位于列表顶部 a = ['something7375', 'something6375', 'something37573', 'something93746',\ 'Whatever22', 'whatever74', 'other837', 'other8394'] print sorted(a, key = lambda s: s.lower()) 结果是 ['other837', 'other8394', 'somet
a = ['something7375', 'something6375', 'something37573', 'something93746',\
'Whatever22', 'whatever74', 'other837', 'other8394']
print sorted(a, key = lambda s: s.lower())
结果是
['other837', 'other8394', 'something37573', 'something6375',\
'something7375', 'something93746', 'Whatever22', 'whatever74']
我希望:
['other837', 'other8394', 'Whatever22', 'whatever74',\
'something37573', 'something6375', 'something7375', 'something93746']
这是假设您的所有列表项都以字母开头,但它应该可以工作
>>> a = ['something7375', 'something6375', 'something37573', 'something93746', 'Whatever22', 'whatever74', 'other837', 'other8394']
>>> print (sorted(a, key = lambda s: s.lower() if s.lower().startswith('something') else 'z'+s.lower()))
['other837', 'other8394', 'Whatever22', 'whatever74', 'something37573', 'something6375', 'something7375', 'something93746']
您可以利用元组/列表将首先按第一个元素排序,然后按第二个元素排序等这一事实。创建一个键函数,对于以“something”开头的任何内容,返回以1开头的元组,否则返回0
def somethingkey(k):
k = k.lower()
if k.startswith('something'):
return (1, k)
else:
return (0, k)
a = ['something7375', 'something6375', 'something37573', 'something93746', 'Whatever22', 'whatever74', 'other837', 'other8394']
>>> print sorted(a, key=somethingkey)
['other837', 'other8394', 'Whatever22', 'whatever74', 'something37573', 'something6375', 'something7375', 'something93746']
你想让它按字符串长度排序吗?你可能可以使用一些稍微复杂的键函数来进行排序,但可能更直观的做法是将它分成两个列表,对每个列表进行排序,然后重新加入。他希望对它进行排序,这样,除了其他单词外,以某个开头的单词可以单独排序,您甚至可以将其缩减为一行
打印排序(a,key=lambda x:(x.startswith('something'),x.lower())
为什么?因为python rocksnot in
在这里不合适;一个项目可能包含某物
,但不是以某物
开头。我假设它只是在字符串中查找某物的任何实例,所以是的,你是正确的。编辑为使用.startswith()
def somethingkey(k):
k = k.lower()
if k.startswith('something'):
return (1, k)
else:
return (0, k)
a = ['something7375', 'something6375', 'something37573', 'something93746', 'Whatever22', 'whatever74', 'other837', 'other8394']
>>> print sorted(a, key=somethingkey)
['other837', 'other8394', 'Whatever22', 'whatever74', 'something37573', 'something6375', 'something7375', 'something93746']