将列表中的两个值相减

问题描述 投票:0回答:3
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,...

python python-3.x list subtraction
3个回答
1
投票

对于大列表,您可以执行(没有硬编码的字符串匹配:)>

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

0
投票
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}")


0
投票
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))

0
投票

您可以使用字典来保存键-值对,并在有更多相同键的列表时更新它们。

© www.soinside.com 2019 - 2024. All rights reserved.