首先根据长度对字符串元素列表进行排序,然后根据字母顺序对长度匹配的元素进行排序

时间:2019-12-22 19:11:23

标签: python pandas

早上好!

就我当前面临的问题寻求帮助。我有一个名为username的列表,如下所示:

用户名= ['Paul','Polish','poloski','melind','Melinda','MeRind','arabic','arabia']

a)我想根据长度/排序的降序对列表进行排序 b)对于长度相同的元素,我想像组成字典中的每个字母一样对它们进行排序,就像它在字典中的显示方式一样(例如“ arabia”在“ arabic”之前)

为了更加清楚,我的目标是创建最终的修改后的列表,使其看起来像:

['Melinda','poloski','arabia','arabic','melind','MeRind','Polish','Paul')

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以这样做:

username.sort(key=lambda item: (-len(item), item.lower()), reverse=False)                                                                                                           

In [3715]: username                                                                                                                                                                            
Out[3715]: 
['Melinda',
 'poloski',
 'arabia',
 'arabic',
 'melind',
 'MeRind',
 'Polish',
 'Paul']



您可以在这样的数据框中执行此操作:

pd.DataFrame(username).apply(lambda x: list((sorted(x, key=lambda item: (-len(item), item.lower())))))                                                                              

         0
0  Melinda
1  poloski
2   arabia
3   arabic
4   melind
5   MeRind
6   Polish
7     Paul


答案 1 :(得分:0)

sorted可以使用一个函数,该函数返回键的元组,每个元组的第一个元素将用于排序,然后在冲突时使用第二个,依此类推。

先按长度排序,然后按字母顺序排序(忽略大小写)

sorted(username, key=lambda u: (len(u), u.lower()))