在python

时间:2018-11-28 10:40:52

标签: 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)))

3 个答案:

答案 0 :(得分:0)

在您的第一个示例中:

这些变量是整数

left_num = int(mylist[2]) 
right_num = int(mylist[3])

在第二个示例中:

left_num = []

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


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

您不能像这样在“写入”中使用列表(2次,1在第二个for循环之前,而2在第二个for循环中):

op_file.write('{}\t{}\t{}\t{}\t{}\t{}\n'.format(x[0], x[1], temp, right_num, x[4], last_column + str(num)))

像这样称呼他们(或取任意值):

op_file.write('{}\t{}\t{}\t{}\t{}\t{}\n'.format(x[0], x[1], temp, right_num[1], x[4], last_column + str(num)))

`

答案 1 :(得分:0)

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

这是您要找的吗?

答案 2 :(得分:0)

def get_write_data(_list):
    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)  
    return '{}\t{}\t{}\t{}\t{}\n'.format(left_num, operator, right_num, total, last_column)  

您有2例

对于情况1:

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

with open("output.txt", "w+") as op_file:
    op_file.write('left \t operator \t right \t total \t last col \n')
    op_file.write(get_write_data(mylist1 ))

对于情况2:

mylist2 = [[['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 _list in lists:
        op_file.write(get_write_data(_list))

这是您想要的吗?