my_list = [['chr1', 65419, 65433], ['chr1', 65520, 65573], ['chr1', 69037, 71585], ['chr1', 69055, 70108], ['chr1', 137621, 139379],['chr2', 65419, 65433], ['chr2', 65520, 65573], ['chr2', 69037, 71585], ['chr3', 69055, 70108]]
在列表中,将包含字符串“ chr1”,“ chr2”,“ chr3”。我想减去每个字符串的索引2-1的值,并获得'chr1','chr2','chr3']的总值
示例在前两个字符串中(65433-65419)应该减去,然后在(65573-65520)中加上,因为两个都包含'chr1'。所有列表均应如此,最终结果应如下'chr1'总计= x_value,'chr2'总计= y_value,'chr3'总计= x_value
我是一种新的python。有人可以为此建议一个代码。
my_list = [['chr1',65419,65433],['chr1',65520,65573],['chr1',69037,71585],['chr1',69055,70108],['chr1', 137621,139379],['chr2',65419,65433],['chr2',65520,65573],['chr2',69037,...
对于大列表,您可以执行(没有硬编码的字符串匹配:)>
from itertools import groupby
my_list = [['chr1', 65419, 65433], ['chr1', 65520, 65573], ['chr1', 69037, 71585], ['chr1', 69055, 70108], ['chr1', 137621, 139379],['chr2', 65419, 65433], ['chr2', 65520, 65573], ['chr2', 69037, 71585], ['chr3', 69055, 70108]]
f = lambda x: x[0]
for k, g in groupby(sorted(my_list, key=f), key=f):
print(k, sum(x[2] - x[1] for x in g))
# chr1 5426
# chr2 2615
# chr3 1053
from collections import defaultdict
my_list = [['chr1', 65419, 65433], ['chr1', 65520, 65573], ['chr1', 69037, 71585], ['chr1', 69055, 70108], ['chr1', 137621, 139379],['chr2', 65419, 65433], ['chr2', 65520, 65573], ['chr2', 69037, 71585], ['chr3', 69055, 70108]]
result = defaultdict(int)
temp = [{i[0]:i[2]-i[1]} for i in my_list]
for di in temp:
result [ list(di.keys())[0] ] += list(di.values())[0]
for i,v in result.items():
print(f"{i} total = {v}")
my_list = [['chr1', 65419, 65433], ['chr1', 65520, 65573], ['chr1', 69037, 71585], ['chr1', 69055, 70108], ['chr1', 137621, 139379],['chr2', 65419, 65433], ['chr2', 65520, 65573], ['chr2', 69037, 71585], ['chr3', 69055, 70108]]
mylist1=list()
mylist2=list()
mylist3=list()
for i in my_list:
if i[0]=='chr1':
mylist1.append(i[2]-i[1])
elif i[0]=='chr2':
mylist2.append(i[2]-i[1])
elif i[0]=='chr3':
mylist3.append(i[2]-i[1])
print("chr1:",sum(mylist1))
print("chr2:",sum(mylist2))
print("chr3:",sum(mylist3))
您可以使用字典来保存键-值对,并在有更多相同键的列表时更新它们。