簡體   English   中英

如何在過濾出某些值的同時對列表列表進行排序?

[英]How do I go about simultaneously sorting a list of lists while filtering out certain values?

我有一個三列的ascii文件,我想根據第三列對文件進行排序和過濾。 也就是說,我要從最小到最大排列第三列,並取出上面的所有值,例如8.0。 如果直接針對一個列表,我知道該怎么做。 但是,我不知道如何將對第三列所做的更改應用於所有列,因為每一行都相互鏈接。

小問題:我已經這樣解壓縮了ascii文件:

f=open('textfile.dat',"r")
lines=f.readlines()
result=[]
for x in lines:
    result.append(x.split('\n')[0])

a = []
b = []
c = []    
for w in result:
    ra.append(w.split()[0])
for x in result:
    dec.append(x.split()[1])
for y in result:
    mag.append(y.split()[2])

p=0
for i in a:
    a[p] = float(i)
    p= p+1    
q=0
for j in b:
    b[q] = float(j)
    q= q+1    
r=0
for k in c:
    c[r] = float(k)
    r= r+1

test=[a,b,c]

至少可以說這似乎不必要地乏味。 有什么辦法可以更緊湊地做到這一點? 它只是一個具有四列的ascii文件。 盡管它們是數字,但它們被讀為'str',因此我必須將其改回浮點數。

排序似乎只是使用轉座子,然后根據列進行排序,這解決了我的第一個問題。

tset = zip(*test)
tset.sort(key = lambda x: x[2])
sorttest = zip(*tset)

但是,如果我想擺脫上面第三列中的所有數字,例如8.0,我會做類似的事情:

testrange[2] = [i for i in sorttest[2] if i <= 8.0]

但是,這僅適用於一行。 例如,我做不到

testrange[0] = [i*1.0 for i in sorttest[2] if i <= 8.0]
testrange[1] = [i*1.0 for i in sorttest[2] if i <= 8.0]

因此,如何在過濾出某些值的同時對列表列表進行排序?

編輯:

Sample input:
 [5,12,3,7,90]
 [9,1,63,23,8]
 [73,11,8,2,5]

Sample output:
 [7,90,3,12]
 [23,8,63,1]
 [2,5,8,11]

您可以使用numpy:

import numpy as np

x = [[5,12,3,7,90],
     [9,1,63,23,8],
     [73,11,8,2,5]]
x = np.array(x)
x = x[:, np.where(x[2] < 70)[0]]
x = x[:, np.argsort(x[2])].tolist()

那會給你:

[[7、90、3、12],[23、8、63、1],[2、5、8、11]

因此,我可能沒有滿足您的要求,但是對於每一行,您都可以列出該行拆分的項目列表。 您將得到列表的清單(行)(清單的一行中的單獨項目)。 然后,您可以按每行的第3列對行進行排序。 然后按3s列值過濾該行列表。 我已經將這些作為單獨的步驟完成,但是您可以將它們合並。

my_data = """1.4 2.5 5.6
2.4 7.5 9.8
4.8 9.7 2.5
4.5 6.5 7.9
1.3 3.4 12.6"""

list_of_data = [line.split() for line in my_data.split("\n")]
sorted_list = sorted(list_of_data, key=lambda line: float(line[2]))
filtered_list = [line for line in sorted_list if float(line[2]) < 8.0]
for line in filtered_list:
    print(" ".join(line))

輸出值

4.8 9.7 2.5
1.4 2.5 5.6
4.5 6.5 7.9

因此,輸出已刪除了第三列等於或大於8.0的那些行。 並且同一行中的所有相關數字也仍然匹配,並且以第3列為基礎

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM