изменение списка списков и создание нового в python 2.7 - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть список списков, подобный этому небольшому примеру:

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

Я пытаюсь создать новый список списков, в котором вместо каждого подсписка у меня будет 3 подсписка.на самом деле new list of list (называемый newmylist) будет иметь 6 подсписков.на самом деле в newmylist каждые 3 новых подсписка аналогичны ожидаемым для столбцов 3 и 4. столбец 3 - начало, а столбец 4 - конец.чтобы вычислить столбцы 3 и 4 в newmylist, я бы разделил (difference between columns 4 and 3) by 3.например, относительно 1-го sublist в mylist:

(14409 - 11873)/3 = 845

, поэтому в 1-м подсписке в newmylisy, начало равно 11873, а конец - 12718, а во 2-м подсписке начало - 12718, а конец - 13563.также в 3-м подсписке начало 13563 и конец 14409. 2-ые 3 подсписка в newmylist будут сделаны из 2-го подсписка из 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 голосов
/ 29 ноября 2018

Вы на самом деле не разделяете свой список на 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...