删除列表中包含特定位置特定项目的列表中的列表

时间:2019-10-09 19:43:40

标签: python list

我有一个列表列表,称为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']]

我要删除此列表中排名第五的'.'列表。

我尝试了以下代码:

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

尽管如此,该代码并未从按列表列表中删除任何列表。

2 个答案:

答案 0 :(得分:1)

只需创建一个新列表:

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

答案 1 :(得分:1)

python中的列表从0开始计数元素。在上面的代码中,没有包含'.'作为第五个元素的子列表。如果您打印出每五个元素,您将得到类似的内容:

4.38466
66
66
66
7.30814

但是,如果您改为更改代码以检查列表的每个第四个元素是否等于'.',则它将按预期运行,例如代码

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

print(listByLine)

仅产生3个子列表的输出