繁体   English   中英

计算列表列表中的元素

[英]Counting the elements inside a list of list

我有一个列表如下

[
 ['DDX11L1', 'lincRNA', 'chr1', 11869, 14409],
 ['WASH7P', 'lincRNA', 'chr1', 14404, 29570],
 ['MIR1302-2HG', 'lincRNA', 'chr1', 29554, 31109],
 ['FAM138A', 'lincRNA', 'chr1', 34554, 36081],
 ['OR4G4P', 'unprocessed_pseudogene', 'chr2', 52473, 53312],
 ['DDX11L1', 'transcribed_unprocessed_pseudogene', 'chr2', 11869, 14409],
 ['WASH7P', 'lincRNA', 'chr2', 14404, 29570],
 ['MIR1302-2HG', 'lincRNA', 'chr1', 29554, 31109],
 ['FAM138A', 'lincRNA', 'chr3', 34554, 36081],
 ['OR4G4P', 'unprocessed_pseudogene', 'chr2', 52473, 53312]
]

内部列表'chr'将与'chr1''chr2''chrs' 取决于那个 chr,我想计算有多少'lincRNA'存在。(不是所有的'chrs'都会有'lincRNA'

示例答案:

我想要的结果如下:

There are 5 'lincRNA' with 'chr1'
There are 1 'lincRNA' with 'chr2'

提前致谢

这很容易做到。 你必须做一些这样的循环:

for i in list:
    for b in i:
        print(str(b) + " " str(i))

这应该访问每个子列表中的每个项目。 现在您需要计算一些 if 块:

if b == "lincRNA":
    count_lincRNA += 1

您可以对要计算的每个项目执行相同的操作。 在 for 循环完成后,您可以打印(或其他)两个计数器变量

另一种方法(因为如果字符串“lincRNA”上有尾随空格,这将失败)是使用正则表达式,但我将把它留给你。

您需要单独跟踪每个 'chrX' 的数量,默认字典会很好地工作:

from collections import defaultdict

count = defaultdict(int)

for ele in lst:
    if ele[1] == 'lincRNA':
        count[ele[2]] += 1

for k, v in count.items():
    print("There are {} 'lincRNA' with '{}'".format(v, k))

结果如预期:

There are 1 'lincRNA' with 'chr3'
There are 1 'lincRNA' with 'chr2'
There are 5 'lincRNA' with 'chr1'

当 lincRNA 不是任何子列表的第二个元素并且任何子列表中有多个 linRNA 时,此代码也可以正常工作。

my_list = [
 ['DDX11L1', 'lincRNA', 'chr1', 11869, 14409],
 ['WASH7P', 'lincRNA', 'chr1', 14404, 29570],
 ['MIR1302-2HG', 'lincRNA', 'chr1', 29554, 31109],
 ['FAM138A', 'lincRNA', 'chr1', 34554, 36081],
 ['OR4G4P', 'unprocessed_pseudogene', 'chr2', 52473, 53312],
 ['DDX11L1', 'transcribed_unprocessed_pseudogene', 'chr2', 11869, 14409],
 ['WASH7P', 'lincRNA', 'chr2', 14404, 29570],
 ['MIR1302-2HG', 'lincRNA', 'chr1', 29554, 31109],
 ['FAM138A', 'lincRNA', 'chr3', 34554, 36081],
 ['OR4G4P', 'unprocessed_pseudogene', 'chr2', 52473, 53312]
]
chrs = ["chr1","chr2","chr3"]
output = {"chr1":0,"chr2":0,"chr3":0}
for l in my_list:
    for _chr in chrs:
        if l.count(_chr) > 0:
            output[_chr] += l.count("lincRNA")
for k,v in output.items():
    print("There are {} 'lincRNA' with {}".format(v,k))

使用 dict 的解决方案

store = {}

L = [['DDX11L1', 'lincRNA', 'chr1', 11869, 14409], 
['WASH7P', 'lincRNA', 'chr1', 14404, 29570], 
['MIR1302-2HG', 'lincRNA', 'chr1', 29554, 31109], 
['FAM138A', 'lincRNA', 'chr1', 34554, 36081], 
['OR4G4P', 'unprocessed_pseudogene', 'chr2', 52473, 53312], 
['DDX11L1', 'transcribed_unprocessed_pseudogene', 'chr2', 11869, 14409], 
['WASH7P', 'lincRNA', 'chr2', 14404, 29570], 
['MIR1302-2HG', 'lincRNA', 'chr1', 29554, 31109], 
['FAM138A', 'lincRNA', 'chr3', 34554, 36081], 
['OR4G4P', 'unprocessed_pseudogene', 'chr2', 52473, 53312]]

if L:
    for rec in L:
        if rec[1] == "lincRNA":
            if rec[2] in store:
                store[rec[2]] = store[rec[2]] + 1
            else:
                store[rec[2]] = 1

for key, value in store.items():
    print("There are '{0}' linkRNA with '{1}'".format(value, key))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM