首页 > 解决方案 > 更改python中列表列表的代码

问题描述

我有一个名为mylist

mylist = ['chr1', '+', '11873', '14409', 'DDX11L1']

并做一些操作,我有以下代码:

left_num = int(mylist[2]) 
right_num = int(mylist[3])
diff= (right_num-left_num)/100 
last_column = mylist[4] + "_part" 


with open("output.txt", "w+") as op_file: 
    op_file.write('{}\t{}\t{}\t{}\t{}\t{}\n'.format(mylist[0], mylist[1], left_num, right_num, mylist[4], last_column + str(1)))
    for num in range(2,101):
        temp = int(right_num) 
        right_num = int(right_num + diff) 
        op_file.write('{}\t{}\t{}\t{}\t{}\t{}\n'.format(mylist[0], mylist[1], temp, right_num, mylist[4], last_column + str(num)))

此代码返回一个名为 的output.txt文件100 rows。我正在尝试将此代码用于list of lists此类示例:

mylist = [['chr1', '+', '11873', '14409', 'DDX11L1'], ['chr1', '-', '14361', '16765', 'WASH7P']]

我正在尝试将上述代码用于此列表列表,如果我设法这样做,我将获得一个包含200行的文件(每个子列表 100 行)。我只是使用 for 循环尝试了以下代码,但它不起作用。你知道我如何将上面的代码更改为list of lists

left_num = []
for i in new:
    left_num.append(int(i[2]))


right_num = []
for i in new:
    right_num.append(int(i[3]))


diff = []
for i in new:
    s = (int(i[3])- int(i[2]))/100
    diff.append(s)


last_column = []
for i in new:
    d = i[4] + "_part"
    last_column.append(d)


for x in mylist:
    with open("output.txt", "w+") as op_file: 
        op_file.write('{}\t{}\t{}\t{}\t{}\t{}\n'.format(x[0], x[1], left_num, right_num, x[4], last_column + str(1))) 
        for num in range(2,101):
            temp = int(right_num) 
            right_num = int(right_num + diff) # calc difference
            op_file.write('{}\t{}\t{}\t{}\t{}\t{}\n'.format(x[0], x[1], temp, right_num, x[4], last_column + str(num)))

标签: python

解决方案


mylist = [[['chr1', '+', '11873', '14409', 'DDX11L1'], ['chr1', '-', '14361', '16765', 'WASH7P']],[['chr1', '+', '11873', '14409', 'DDX11L1'], ['chr1', '-', '14361', '16765', 'WASH7P']]]

with open("output.txt", "w+") as op_file:
    op_file.write('left \t operator \t right \t total \t last col \n')
    for lists in mylist:
        for _list in lists:
            operator = _list[1]
            left_num = _list[2]
            right_num = _list[3]
            last_column = _list[4] + "_part"
            if operator == '+':
                total = int(left_num)+int(right_num)                
            if operator == '-':
                total = int(left_num)-int(right_num)                

            op_file.write('{}\t{}\t{}\t{}\t{}\n'.format(left_num, operator, right_num, total, last_column))

输出

left     operator    right   total   last col 
11873   +   14409   26282   DDX11L1_part
14361   -   16765   -2404   WASH7P_part
11873   +   14409   26282   DDX11L1_part
14361   -   16765   -2404   WASH7P_part

这是你想要的?


推荐阅读