Сначала найдите способ получить данные для сортировки из каждого элемента списка:
import re
list1 = ['f(-2,-2) = 0', 'f(-2,-1) = 0', 'f(-2,0) = 0', 'f(-1,-2) = 0', 'f(-1,-1) = 0', 'f(-1,0) = 0', 'f(0,-2) = 0', 'f(0,-1) = 0', 'f(-2,1) = scalar2_qp_1211(0,1)*(((d)*p11^2+((2*d+4)*m10^2+(-2*d)*m4^2)*p11+(d)*m10^4+((-2*d)*m4^2)*m10^2+(d)*m4^4)*den(d))', 'f(-2,2) = scalar2_qp_1211(0,1)*(((d-2)*p11^2+((2*d+4)*m10^2+(-2*d+4)*m4^2)*p11+(d+2)*m10^4+((-2*d)*m4^2)*m10^2+(d-2)*m4^4)*den(2*m10^2))', 'f(-1,1) = scalar2_qp_1211(0,1)*(p11+m10^2-m4^2)', 'f(-1,2) = scalar2_qp_1211(0,1)*(((d-2)*p11+(d)*m10^2+(-d+2)*m4^2)*den(2*m10^2))', 'f(0,1) = scalar2_qp_1211(0,1)*(1)', 'f(0,2) = scalar2_qp_1211(0,1)*((d-2)*den(2*m10^2))', 'f(1,-2) = scalar2_qp_016(1,0)*(((d)*p11^2+((-2*d)*m10^2+(2*d+4)*m4^2)*p11+(d)*m10^4+((-2*d)*m4^2)*m10^2+(d)*m4^4)*den(d))', 'f(1,-1) = scalar2_qp_016(1,0)*(p11-m10^2+m4^2)', 'f(1,0) = scalar2_qp_016(1,0)*(1)', 'f(1,1) = scalar2_qp_1216(1,1)*(1)', 'f(1,2) = scalar2_qp_016(1,0)*((d-2)*den(p11^2+(-2*m10^2-2*m4^2)*p11+m10^4+(-2*m4^2)*m10^2+m4^4))', 'f(2,-2) = scalar2_qp_016(1,0)*(((d-2)*p11^2+((-2*d+4)*m10^2+(2*d+4)*m4^2)*p11+(d-2)*m10^4+((-2*d)*m4^2)*m10^2+(d+2)*m4^4)*den(2*m4^2))', 'f(2,-1) = scalar2_qp_016(1,0)*(((d-2)*p11+(-d+2)*m10^2+(d)*m4^2)*den(2*m4^2))', 'f(2,0) = scalar2_qp_016(1,0)*((d-2)*den(2*m4^2))', 'f(2,1) = scalar2_qp_016(1,0)*(((d-2)*p11+(-d+2)*m10^2+(-d+2)*m4^2)*den((2*m4^2)*p11^2+((-4*m4^2)*m10^2-4*m4^4)*p11+(2*m4^2)*m10^4+(-4*m4^4)*m10^2+2*m4^6))', 'f(2,2) = scalar2_qp_016(1,0)*(((d-2)*p11^2+((-2*d+4)*m10^2+(-2*d^2+12*d-16)*m4^2)*p11+(d-2)*m10^4+((-2*d^2+12*d-16)*m4^2)*m10^2+(2*d^2-13*d+18)*m4^4)*den((2*m4^2)*p11^4+((-8*m4^2)*m10^2-8*m4^4)*p11^3+((12*m4^2)*m10^4+(8*m4^4)*m10^2+12*m4^6)*p11^2+((-8*m4^2)*m10^6+(8*m4^4)*m10^4+(8*m4^6)*m10^2-8*m4^8)*p11+(2*m4^2)*m10^8+(-8*m4^4)*m10^6+(12*m4^6)*m10^4+(-8*m4^8)*m10^2+2*m4^10))', 'f(0,0) = 0']
for item in list1:
print ([(i[0],i[1]) for i in re.findall(r'^f\((-?\d+),(-?\d+)\)', item)])
Это выведет хороший список пар чисел, так что findall
работает. Выражение findall
довольно просто, как регулярные выражения go, потому что все, что он делает, - находит последовательность f(<em>number</em>₁,<em>number</em>₂)
в каждом элементе списка и возвращает кортеж (<em>number</em>₁,<em>number</em>₂)
. Это данные для сортировки.
При этом вы можете использовать кортеж в качестве входных данных для аргумента key
в list.sort
:
for i in sorted(list1, key=lambda item: [(int(i[0]),int(i[1])) for i in [(i[0],i[1]) for i in re.findall(r'f\((-?\d+),(-?\d+)\)', item)]]):
print (i)
с результатом:
f(-2,-2) = 0
f(-2,-1) = 0
f(-2,0) = 0
f(-2,1) = scalar2_qp_1211(0,1)...
f(-2,2) = scalar2_qp_1211(0,1)...
f(-1,-2) = 0
f(-1,-1) = 0
f(-1,0) = 0
f(-1,1) = scalar2_qp_1211(0,1)...
f(-1,2) = scalar2_qp_1211(0,1)...
f(0,-2) = 0
f(0,-1) = 0
f(0,0) = 0
f(0,1) = scalar2_qp_1211(0,1)*...
f(0,2) = scalar2_qp_1211(0,1)*...
f(1,-2) = scalar2_qp_016(1,0)*...
f(1,-1) = scalar2_qp_016(1,0)*...
f(1,0) = scalar2_qp_016(1,0)*(...
f(1,1) = scalar2_qp_1216(1,1)*...
f(1,2) = scalar2_qp_016(1,0)*(...
f(2,-2) = scalar2_qp_016(1,0)*...
f(2,-1) = scalar2_qp_016(1,0)*...
f(2,0) = scalar2_qp_016(1,0)*(...
f(2,1) = scalar2_qp_016(1,0)*(...
f(2,2) = scalar2_qp_016(1,0)*(...