减去列表中的两个值

my_list = [['chr1',65419,65433],['chr1',65520,65573],69037,71585],69055,70108],137621,139379],['chr2',['chr3',70108]]

列表中将包含字符串“ chr1”,“ chr2”,“ chr3”。我想减去每个字符串的索引2-1的值,并获取'chr1','chr2','chr3'的总值

示例 在前两个字符串中(65433-65419)应该减去,然后在(65573-65520)中加上,因为它们都包含'chr1'。所有列表均应如此,最终结果应如下 'chr1'总计= x_value,'chr2'总计= y_value,'chr3'总计= x_value

我是一种新的python。有人可以为此建议一个代码。

luchangshuai1989 回答:减去列表中的两个值

对于大型列表,您可以这样做(不匹配硬编码的字符串):

from collections import defaultdict
my_list = [['chr1',65419,65433],['chr1',65520,65573],69037,71585],69055,70108],137621,139379],['chr2',['chr3',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}")

,
numpy.savetxt
,
my_list = [['chr1',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))

sum已经是要使用的预定义函数。

现在,如果您还有更多的时间:

my_list = [['chr1',70108]]
chrset=set()
for i in my_list:
    chrset.add(i[0])

res = dict.fromkeys(chrset,0)

for i in my_list:
    res[i[0]]=res[i[0]]+i[2]-i[1]
print(res)

对于python新手来说,创建一组chr1,chr2,.....然后创建字典并直接对其进行操作会容易得多。

,

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

my_dict=dict()
for entry in my_list:
    if entry[0] in my_dict:
        my_dict[entry[0]]+=entry[2]-entry[1]
     else:
         my_dict [entry[0]]=entry[2]-entry[1]

无论您拥有什么键,它都可以工作(不限于示例中的三个键)

本文链接:https://www.f2er.com/3089784.html

大家都在问