为了账号安全,请及时绑定邮箱和手机立即绑定

创建一个对两个列表进行排序的函数

创建一个对两个列表进行排序的函数

大话西游666 2022-06-07 18:57:38
我正在尝试创建一个函数,该函数返回一个已排序的字符串列表,但附加的条件是它对所有以 w/ 开头的字符串进行排序'x'。因此,例如,列表['mix', 'xyz, 'apple', 'xanadu'] 将产生['xanadu', xyz', 'apple', 'mix']def front_x(words):    x = []    y = []    for k, v in enumerate(words):        if v.startswith("x"):            x.append(v)        else:            y.append(v)    x.sort()    y.sort()    print(x.extend(y))this_list = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']front_x(this_list)这给了我一个输出None。
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

您可以使用sorted以下内容key:


l = ['mix', 'xyz', 'apple', 'xanadu']


sorted(l, key=lambda x: (x[0]!='x', x))

# ['xanadu', 'xyz', 'apple', 'mix']

或@deepspace 建议使用str.startswith:


sorted(l, key=lambda s: (not s.startswith('x'), s))

上面的键是基于元组对字符串进行排序,由表达式产生的布尔值x[0]!='x'和字符串本身组成:


[(x[0]!='x', x) for x in l]

# [(True, 'mix'), (False, 'xyz'), (True, 'apple'), (False, 'xanadu')]

因此,排序的第一个标准是字符串是否以x(记住FalseandTrue被评估为0and 1)开头,然后是字符串本身是否按字母数字排序。


查看完整回答
反对 回复 2022-06-07
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

如果您想生成另一个列表,可以使用 sorted 内置函数,但如果您不介意只更改当前列表,请使用方法list.sort:


>>> l = ['mix', 'xyz', 'apple', 'xanadu']

>>> l.sort(key=lambda s: (not s.startswith('x'), s))

>>> l

['xanadu', 'xyz', 'apple', 'mix']


查看完整回答
反对 回复 2022-06-07
  • 2 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信