Python对部分列表项进行排序

时间:2018-06-27 11:32:06

标签: python python-3.x list

我已经解析了一个tsv文件,并具有以下结构:

public List<String> getAllNames() {
    List<String> retData = new ArrayList<String>();
    String selectQuery = "SELECT NAME FROM MYTABLE";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            retData.add(cursor.getString(0));
        } while (cursor.moveToNext());
    }
    return retData;
}

我的[['x1','y1','x2','y2'], [1,1,0,80], [.95,1,.05,70], [.93,1,.1,65], … ] 值按降序排列;从x11。我的0值按升序排列;从x20。我需要两个都按升序排列。我不能只翻转列表,否则1会以降序排列。另外,请注意,x2x1是成对的,因此对y1所做的任何操作都必须对x1进行,以确保仍保留数据。

我出于羞耻省略了我的尝试,但是如果每个人都保证不笑,我尝试的是添加一个y1以使我的原始列表中的倒数第n个项保持不变。 -i是上面看到的数据结构。

raw_data

不幸的是,那没有用。

问题::如何编写列表理解,以使我的new_list = [[raw_data[2][-i], raw_data[3][-i]] for i in raw_data (和相应的x1值)升序?

1 个答案:

答案 0 :(得分:2)

您可以利用以下事实:比较元组时,比较基于第一个元素-对于相等的第一个元素,将比较第二个元素。考虑到这一点,您可以先将列表列表按摩为元组列表,从而将每个“ x1”值与相应的“ y1”值相关联,然后获取排序后的列表:

>>> lst = [['x1','y1','x2','y2'],[1,1,0,80],[.95,1,.05,70],[.93,1,.1,65]]
>>> sorted((x1, y1) for x1, y1, x2, y2 in lst[1:])
[(0.93, 1), (0.95, 1), (1, 1)]