我已经解析了一个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],
…
]
值按降序排列;从x1
到1
。我的0
值按升序排列;从x2
到0
。我需要两个都按升序排列。我不能只翻转列表,否则1
会以降序排列。另外,请注意,x2
和x1
是成对的,因此对y1
所做的任何操作都必须对x1
进行,以确保仍保留数据。
我出于羞耻省略了我的尝试,但是如果每个人都保证不笑,我尝试的是添加一个y1
以使我的原始列表中的倒数第n个项保持不变。 -i
是上面看到的数据结构。
raw_data
不幸的是,那没有用。
问题::如何编写列表理解,以使我的new_list = [[raw_data[2][-i], raw_data[3][-i]] for i in raw_data
(和相应的x1
值)升序?
答案 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)]