使用长度和字母顺序对列表进行排序

时间:2017-04-27 07:11:32

标签: python python-2.7 sorting

我有一个单词HACK的所有组合的列表,如下所示:

lista = ['H', 'A', 'C', 'K', 'HA', 'HC', 'HK', 'AC', 'AK', 'CK']

我尝试使用以下方法对上述内容进行排序:

lista.sort(lambda x,y:cmp(len(x),len(y)))

给了我相同的结果。

如何按长度和字母顺序排序。

预期输出

['A', 'C', 'H', 'K', 'AC', 'AH', 'AK', 'CH', 'CK', 'HK']

更新

from itertools import combinations
inp = "HACK 2".split(" ")
lista = []
for i in range(1,int(inp[1])+1):

    for item in list(combinations(inp[0],i)):

        lista.append("".join(item))

lista = sorted(lista, key=lambda x: (len(x), x))

print lista

#Output
['A', 'C', 'H', 'K', 'AC', 'AK', 'CK', 'HA', 'HC', 'HK']

#Expected Output
['A', 'C', 'H', 'K', 'AC', 'AH', 'AK', 'CH', 'CK', 'HK']

我如何迭代这些组合也有什么问题?

2 个答案:

答案 0 :(得分:1)

list.sortsorted接受可选的关键字参数<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1.5" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:orientation="horizontal" android:paddingLeft="15dp" android:paddingRight="15dp" android:paddingTop="15dp"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4.75" android:layout_gravity="center" android:padding="5dp" android:background="@drawable/bg_rounded_button" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="0.7" android:src="@drawable/iv_user_ph" /> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.3" android:background="@null" android:gravity="center" android:textSize="14dp" android:textStyle="bold" android:text="Test" /> </LinearLayout> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.5"/> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4.75" android:layout_gravity="center" android:padding="5dp" android:background="@drawable/bg_rounded_button" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="0.7" android:src="@drawable/iv_user_ph" /> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.3" android:background="@null" android:gravity="center" android:textSize="14dp" android:textStyle="bold" android:text="Test" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:orientation="horizontal" android:layout_marginTop="10dp" android:paddingBottom="15dp" android:paddingLeft="15dp" android:paddingRight="15dp"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4.75" android:layout_gravity="center" android:padding="5dp" android:background="@drawable/bg_rounded_button" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="0.7" android:src="@drawable/iv_user_ph" /> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.3" android:background="@null" android:gravity="center" android:textSize="14dp" android:textStyle="bold" android:text="Test" /> </LinearLayout> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.5" /> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4.75" android:layout_gravity="center" android:padding="5dp" android:background="@drawable/bg_rounded_button" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="0.7" android:src="@drawable/iv_user_ph" /> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.3" android:background="@null" android:gravity="center" android:textSize="14dp" android:textStyle="bold" android:text="Test" /> </LinearLayout> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> 。 key函数的返回值用于比较元素而不是元素本身。

对于您的情况,您可以使用返回元组的键函数(长度,字符串本身):

key

答案 1 :(得分:1)

您不仅要对 <View android:id="@+id/view_line" android:layout_width="match_parent" //change here android:layout_height="2dp" android:layout_marginTop="20dp" android:layout_toRightOf="@+id/img_exercise" android:background="@color/color_black" /> 列表进行排序,还要对其中的所有字符串进行排序。所以

lista