У меня есть файл 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]