首页 > 解决方案 > 根据原始列表之一中的重复项,将列表列表拆分为两个列表列表

问题描述

我有两个列表列表

queryBounds = [[2, 1924], [2, 1924], [2187, 2233], [2187, 2233]]
sequenceBounds = [[95516, 97442], [139777, 137851], [97433, 97479], [137860, 137814]]

我想queryBounds分成两个列表queryBoundsAqueryBoundsB这样两个列表中都没有重复项,即

queryBoundsA = [[2, 1924], [2187, 2233]]
queryBoundsB = [[2, 1924], [2187, 2233]]

然后,我想拆分sequenceBounds为两个列表sequenceBoundsAsequenceBoundsB以便其中sequenceBounds具有与项目相同索引的项目queryBounds移动到queryBoundsAorqueryBoundsB中,并且它们的列表索引与具有相同索引的项目的位置相匹配sequenceBounds

sequenceBoundsA = [[95516, 97442], [97433, 97479]]
sequenceBoundsB = [[139777, 137851], [137860, 137814]]

queryBounds当仅包含重复项时,我还需要此功能:

queryBounds = [[2, 2233], [2, 2233]]
sequenceBounds = [[111722, 113939], [166447, 164230]]

queryBoundsA = [[2, 2233]]
queryBoundsB = [[2, 2233]]

sequenceBoundsA = [[111722, 113939]]
sequenceBoundsB = [[166447, 164230]]

我不知道该怎么做

标签: pythonlist

解决方案


让字典来完成这项艰巨的工作。这将处理超过 2 个副本:

queryBounds = [[2, 1924], [2, 1924], [2187, 2233], [2187, 2233]]
sequenceBounds = [[95516, 97442], [139777, 137851], [97433, 97479], [137860, 137814]]

# Create a dict:

sorter = {}
for q, s in zip(queryBounds,sequenceBounds):
    q = tuple(q)
    if q not in sorter:
        sorter[q] = [s]
    else:
        sorter[q].append( s )

# Print the results:
qb = [[]]
sb = [[]]
for k, v in sorter.items():
    for i,v1 in enumerate(v):
        if i >= len(qb):
            qb.append( [] )
            sb.append( [] )
        qb[i].append( list(k) )
        sb[i].append( v1 )

print( qb )
print( sb )

输出:

[[[2, 1924], [2187, 2233]], [[2, 1924], [2187, 2233]]]
[[[95516, 97442], [97433, 97479]], [[139777, 137851], [137860, 137814]]]

推荐阅读