更改列表列表并在python 2.7中添加一个新列表

时间:2018-11-28 22:38:22

标签: python list

我有一个像这样的小例子的列表清单:

mylist = [['chr1', '+', '11873', '14409', 'DDX11L1'], ['chr1', '-', '14361', '16765', 'WASH7P']]

我正在尝试创建一个新的列表列表,其中有3个子列表而不是每个子列表。实际上new list of list(称为newmylist)将有6个子列表。 实际上,在newmylist中,每3个新的子列表对于第3列和第4列都是相似的期望。第3列是开始,第4列是结束。要计算newmylist中的第3列和第4列,我将(difference between columns 4 and 3) by 3除以。 例如关于sublist中的第一个mylist

(14409 - 11873)/3 = 845

因此,在newmylisy的第一个子列表中,开始是11873,结束是12718,在第二个子列表中,开始是12718,结束是13563。在第三个子列表中,开始是13563,结束是14409。newmylist中的第二个3个子列表将来自mylist的第二个子列表。这是预期的输出

expected output

newmylist = [['chr1', '+', '11873', '12718', 'DDX11L1'], ['chr1', '+', '12718', '13563', 'DDX11L1'], ['chr1', '+', '13563', '14409', 'DDX11L1'], ['chr1', '-', '14361', '15162', 'WASH7P'], ['chr1', '-', '15162', '15963', 'WASH7P'], ['chr1', '-', '15963', '16765', 'WASH7P']]

我正在尝试使用以下代码在python中进行操作。此代码不返回我要寻找的内容。你知道如何解决吗?

start = []
for item in mylist:
    start.append(item[2])

end = []
for item in mylist:
    end.append(item[3])

diff = []
for item in mylist:
    d = item[3]-item[2]/3
    diff.append(d)

newmylist = []
for i in range(len(mylist)):
    content = [i[0], i[1], start[i], start[i]+diff[i], i[4]]
    newmylist.append(content)

1 个答案:

答案 0 :(得分:1)

您并没有真正将列表分为3个单独的列表(在上一个循环中)。一种实现方法是定义一个名为split的函数,该函数可以根据需要拆分列表。然后,您可以方便地在每个子列表上调用该函数:

def split(l, chunks=3):
    diff = (int(l[3]) - int(l[2])) // chunks
    res = []
    for i in range(chunks):
        res.append([l[0], l[1], str(int(l[2]) + diff * i), str(int(l[2]) + diff * (i + 1)), l[4]])
    res[-1][3] = l[3] # adjust last number to match what "l" has
    return res    

mylist = [['chr1', '+', '11873', '14409', 'DDX11L1'], ['chr1', '-', '14361', '16765', 'WASH7P']]
newmylist = []
for lst in mylist:
    for newlst in split(lst):
        newmylist.append(newlst)

print(newmylist)

输出

[['chr1', '+', '11873', '12718', 'DDX11L1'],
 ['chr1', '+', '12718', '13563', 'DDX11L1'],
 ['chr1', '+', '13563', '14409', 'DDX11L1'],
 ['chr1', '-', '14361', '15162', 'WASH7P'],
 ['chr1', '-', '15162', '15963', 'WASH7P'],
 ['chr1', '-', '15963', '16765', 'WASH7P']]

请注意,如果您愿意,也可以使用列表理解:

newmylst = [newlst for lst in mylist for newlst in split(lst)]