Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:创建显示两列之间相同行条目移位的输出_Python_Row_Shift - Fatal编程技术网

Python:创建显示两列之间相同行条目移位的输出

Python:创建显示两列之间相同行条目移位的输出,python,row,shift,Python,Row,Shift,目标是查看两个列之间的差异,每个列包含相同的行条目,只是在不同的行上 [ ["ENSCAFG00000008901","ENSCAFG00000013762"], ["ENSCAFG00000029470","ENSCAFG00000003029"], ["ENSCAFG00000013782","ENSCAFG00000007249"], ["ENSCAFG00000000806","ENSCAFG00000012468"], ["ENSCAFG00000013341","ENSCAFG000

目标是查看两个列之间的差异,每个列包含相同的行条目,只是在不同的行上

[
["ENSCAFG00000008901","ENSCAFG00000013762"],
["ENSCAFG00000029470","ENSCAFG00000003029"],
["ENSCAFG00000013782","ENSCAFG00000007249"],
["ENSCAFG00000000806","ENSCAFG00000012468"],
["ENSCAFG00000013341","ENSCAFG00000018167"],
["ENSCAFG00000003376","ENSCAFG00000003376"],
["ENSCAFG00000000812","ENSCAFG00000018164"],
["ENSCAFG00000012468","ENSCAFG00000001591"],
["ENSCAFG00000031786","ENSCAFG00000013782"],
["ENSCAFG00000000803","ENSCAFG00000030793"],
["ENSCAFG00000003029","ENSCAFG00000015177"],
["ENSCAFG00000011565","ENSCAFG00000005750"]
]
这个列表有很多行,所以我不能手工完成。例如,我们在第一列的第11行和第二列的第2行看到ENSCAFG0000003029。我想创建一些输出,显示第一列和第二列之间相对于第一列的行移位。因此,在ENSCAFG0000003029的情况下,我希望在第一列中出现ENSCAFG0000003029的行之后看到+9或类似的内容


我希望我的目标是明确的,这是提出问题的正确地点

我想你得循环两次。例如,如果简化假设第一列中的条目是唯一的,则可以执行以下操作:

cols = [['ENSCAFG00000008901', 'ENSCAFG00000013762'],
        ['ENSCAFG00000029470', 'ENSCAFG00000003029'],
        ['ENSCAFG00000013782', 'ENSCAFG00000007249'],
        ['ENSCAFG00000000806', 'ENSCAFG00000012468'],
        ['ENSCAFG00000013341', 'ENSCAFG00000018167'],
        ['ENSCAFG00000003376', 'ENSCAFG00000003376'],
        ['ENSCAFG00000000812', 'ENSCAFG00000018164'],
        ['ENSCAFG00000012468', 'ENSCAFG00000001591'],
        ['ENSCAFG00000031786', 'ENSCAFG00000013782'],
        ['ENSCAFG00000000803', 'ENSCAFG00000030793'],
        ['ENSCAFG00000003029', 'ENSCAFG00000015177'],
        ['ENSCAFG00000011565', 'ENSCAFG00000005750']]
positions = dict((x[0], i) for i, x in enumerate(cols))
[positions[x[1]]-i for i, x in enumerate(cols) if x[1] in positions]
输出:

[9, 4, 0, -6]

对于很长的列表来说,它不会很有效,但这应该是可行的:

lst = [
    ["ENSCAFG00000008901","ENSCAFG00000013762"],
    ["ENSCAFG00000029470","ENSCAFG00000003029"],
    ["ENSCAFG00000013782","ENSCAFG00000007249"],
    ["ENSCAFG00000000806","ENSCAFG00000012468"],
    ["ENSCAFG00000013341","ENSCAFG00000018167"],
    ["ENSCAFG00000003376","ENSCAFG00000003376"],
    ["ENSCAFG00000000812","ENSCAFG00000018164"],
    ["ENSCAFG00000012468","ENSCAFG00000001591"],
    ["ENSCAFG00000031786","ENSCAFG00000013782"],
    ["ENSCAFG00000000803","ENSCAFG00000030793"],
    ["ENSCAFG00000003029","ENSCAFG00000015177"],
    ["ENSCAFG00000011565","ENSCAFG00000005750"]
    ]

col_1 = [x[0] for x in lst]
col_2 = [x[1] for x in lst]

idx_offset = [None] * len(col_1)
for col_1_idx, val_1 in enumerate(col_1):
    try:
        col_2_idx = col_2.index(val_1)
    except ValueError:
        continue
    idx_offset[col_1_idx] = col_2_idx - col_1_idx
简而言之,对于第一列中的每个值,在第二列中找到该值的索引(如果存在)。取这个索引,从中减去第一列中值的索引,这就是您的输出。对于第一列中未出现在第二列中的元素,输出idx_偏移量将为无。在这种情况下,输出将变为:

[None, None, 6, None, None, 0, None, -4, None, None, -9, None]

这是我想要的输出,然而,当我输入这个时,我没有得到输出或者你在文章中描述的任何输出。此外,是否有一种简单的方法可以将输出附加到它们所属的行?上述方法确实不会产生输出。您可以轻松地创建原始列表的新副本,并附加索引偏移量:outp=[[val_1,val_2,idx]用于val_1,val_2,zipcol_1中的idx,col_2,idx_offset]
[None, None, 6, None, None, 0, None, -4, None, None, -9, None]