有如下两列数据
希望对两列综合排序生成如下结果:
本人技术不过关,没有得出理想结果
一部分
是取每行的最小值排序吧。
li=[
['Glyma.13G081400','Glyma.06G111400'],
['Glyma.13G081600','Glyma.06G111300'],
['Glyma.13G081700','Glyma.06G110800'],
['Glyma.13G082300','Glyma.06G110600'],
['Glyma.13G082800','Glyma.06G110100'],
['Glyma.13G083100','Glyma.06G109800'],
['Glyma.13G083200','-'],
['Glyma.13G082700','-'],
['Glyma.13G081300','-'],
['Glyma.13G082500','-'],
['Glyma.13G082900','-'],
['Glyma.13G081800','-'],
['Glyma.13G083300','-'],
['Glyma.13G082400','-'],
['Glyma.13G082000','-'],
['Glyma.13G082100','-'],
['Glyma.13G082600','-'],
['Glyma.13G081500','-'],
['Glyma.13G083000','-'],
['Glyma.13G081900','-'],
['Glyma.13G082200','-'],
['-','Glyma.06G110000'],
['-','Glyma.06G109600'],
['-','Glyma.06G109700'],
['-','Glyma.06G110900'],
['-','Glyma.06G111600'],
['-','Glyma.06G110300'],
['-','Glyma.06G111000'],
['-','Glyma.06G111500'],
['-','Glyma.06G110400'],
['-','Glyma.06G110500'],
['-','Glyma.06G111200'],
['-','Glyma.06G110700'],
['-','Glyma.06G111100'],
['-','Glyma.06G109900'],
['-','Glyma.06G110200'],
]
def f(d):
if d[0]=='-':
return d[1]
elif d[1]=='-':
return d[0]
else:
return min(d)
li.sort(key=f)
for v in li:
print(v)
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
可以截图看看这两列数据吗,贴出来的数据有点乱,.和-不知道表示什么
你读取数据时直接存储数据成一个二维数组,对二维数据进行排序就可以了。
排序的时候需要重写一下排序的规则。
你的规则应该是取当前行有效值里面的最小值。自定义以下行比较函数就可以了。然后直接用list字段的sort方法即可。
def my_compare(l1,l2):
k1=min(set(l1) - set(('-')))
k2=min(set(l2) - set(('-')))
if k1>k2:
return 1
elif k1<k2:
return -1
return 0
完整代码可以参考下面的。
import functools
def my_compare(l1,l2):
k1=min(set(l1) - set(('-')))
k2=min(set(l2) - set(('-')))
if k1>k2:
return 1
elif k1<k2:
return -1
return 0
l=[
['Glyma.13G081400', 'Glyma.06G111400'],
['Glyma.13G081600', 'Glyma.06G111300'],
['Glyma.13G081700', 'Glyma.06G110800'],
['Glyma.13G083200', '-'],
['Glyma.13G082700', '-'],
['Glyma.13G081300', '-'],
['Glyma.13G082500', '-'],
['Glyma.13G082900', '-'],
['Glyma.13G081800', '-'],
['Glyma.13G082300', 'Glyma.06G110600'],
['Glyma.13G082800', 'Glyma.06G110100'],
['Glyma.13G083100', 'Glyma.06G109800']
]
l.sort(key=functools.cmp_to_key(my_compare))
[print(x) for x in l]