Удалить списки в списке списков, которые содержат определенный элемент в определенной позиции - PullRequest
0 голосов
/ 09 октября 2019

У меня есть список списков, который называется listByLine.

[['ACmerged_contig_24664', '379', '.', 'G', 'A', '4.38466', '.', 'DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=36', 'GT:PL', '1/1:32,3,0'], ['ACmerged_contig_24664', '380', '.', 'C', '.', '66', '.', 'DP=1;MQ0F=0;AN=2;DP4=0,1,0,0;MQ=36', 'GT', '0/0'], ['ACmerged_contig_24664', '381', '.', 'T', '.', '66', '.', 'DP=1;MQ0F=0;AN=2;DP4=0,1,0,0;MQ=36', 'GT', '0/0'], ['ACmerged_contig_24664', '382', '.', 'C', '.', '66', '.', 'DP=1;MQ0F=0;AN=2;DP4=0,1,0,0;MQ=36', 'GT', '0/0'], ['ACmerged_contig_24664', '383', '.', 'G', 'A', '7.30814', '.', 'DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=36', 'GT:PL', '1/1:36,3,0']]

Я хочу удалить списки в этом списке, у которых '.' находится на 5 месте в списке.

Я пробовал этот код:

for list in listByLine:
    if list[5] == '.':
        listByLine.remove(list)

Этот код не удаляет ни один из списков по списку списков.

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Списки в элементах подсчета Python начинаются с 0. В вашем коде выше нет подсписка, который содержит '.' в качестве пятого элемента. Если вы распечатаете каждый пятый элемент, вы получите что-то вроде:

4.38466
66
66
66
7.30814

Но если вместо этого вы измените свой код, чтобы проверить, что каждый четвертый элемент списка равен '.' - он будет работать как положеноНапример, код

for l in listByLine:
  if l[4] == '.':
    listByLine.remove(l)

print(listByLine)

будет выводить только 3 подсписка

1 голос
/ 09 октября 2019

Просто создайте новый список:

lst = [['ACmerged_contig_24664', '379', '.', 'G', 'A', '4.38466', '.', 'DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=36', 'GT:PL', '1/1:32,3,0'],
       ['ACmerged_contig_24664', '380', '.', 'C', '.', '66', '.', 'DP=1;MQ0F=0;AN=2;DP4=0,1,0,0;MQ=36', 'GT', '0/0'],
       ['ACmerged_contig_24664', '381', '.', 'T', '.', '66', '.', 'DP=1;MQ0F=0;AN=2;DP4=0,1,0,0;MQ=36', 'GT', '0/0'],
       ['ACmerged_contig_24664', '382', '.', 'C', '.', '66', '.', 'DP=1;MQ0F=0;AN=2;DP4=0,1,0,0;MQ=36', 'GT', '0/0'],
       ['ACmerged_contig_24664', '383', '.', 'G', 'A', '7.30814', '.', 'DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=36', 'GT:PL', '1/1:36,3,0'],
       ['x', 'y', 'z']]

new_lst = [sublist
           for sublist in lst
           for length in [len(sublist)]
           if ((length < 5) or (length >= 5 and not sublist[4] == '.'))]
print(new_lst)

Пара замечаний: пятый элемент называется lst[4], а приведенный выше код проверяет длину - более короткие спискипросто хранитсяКроме того, не называйте свои переменные list.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...