我有一个列表列表,称为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)
尽管如此,该代码并未从按列表列表中删除任何列表。
答案 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个子列表的输出