如何从列表中选择两个元素并在Python中对它们进行数学运算?

时间:2012-12-16 17:11:42

标签: python

我有一个包含序列的几个开始和结束位置的文件(MANY!),我想选择开始和结束位置,从开头减去结束位置以获得特定序列的长度,然后随机将该序列放在最小起始编号和最大结束编号之间的某处。不知道这是否有意义......

然而,到目前为止,这是我所拥有的:

#!/usr/bin/env python

import sys
import random
import math
import re

file = open(sys.argv[1], 'r')

list = []

for line in file:
    if line.startswith('G'):
        continue

    else:
        pos = re.split('\s', line)
        list.append(pos[0])
        list.append(pos[1])
        list = map(int, list)
        for i in list:
            #ldom = (i:i+1)-i + 1 
print randrange(1, 3000000000, ldom)

file.close()

'#'行是我遇到的问题。我有一个列表,其中每个元素表示开始或结束位置,列表[0]表示开始,列表[1]表示结束位置。我只是不知道如何从列表[0]中减去列表[1],并将1添加到该数字....列表推导似乎只适用于非特定元素或全部。

2 个答案:

答案 0 :(得分:2)

这是一个在空格上分割一行的ipython-interpreter示例(如str.split()的文档中所述,空格是默认分隔符),将项目转换为整数(通过map(int, ...),然后{{ 3}}成对:

In [127]: line='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'

In [128]: zip(*[iter(map(int, line.split()))]*2)
Out[128]: [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9), (10, 11), (12, 13), (14, 15)]

您可以将一些变量(比如bounds)设置为zip表达式,然后在列表bounds上进行迭代,以执行您需要对“特定序列”执行的操作。 例如:

In [131]: bounds = zip(*[iter(map(int, line.split()))]*2)

In [132]: for lo, hi in bounds: print 'lo:', lo, '\thi:', hi, '\tdelta:', hi-lo+1
lo: 0   hi: 1   delta: 2
lo: 2   hi: 3   delta: 2
lo: 4   hi: 5   delta: 2
lo: 6   hi: 7   delta: 2
lo: 8   hi: 9   delta: 2
lo: 10  hi: 11  delta: 2
lo: 12  hi: 13  delta: 2
lo: 14  hi: 15  delta: 2

答案 1 :(得分:0)

  

我只是不知道如何从列表[0]中减去列表[1],并将1添加到该数字....

我不知道这是否有帮助,但总是尽量保持简单

ldom = list[0] - list[1] + 1

如果您操作的对象是一种数字并且删除列表对象上的迭代(for i in list

,则应该这样做