从python列表中指定开始和结束位置

时间:2015-07-12 04:50:17

标签: python list

我有一个由位置和分数组成的python列表。

我需要找到一种编写代码的方法,该代码将指定分数超过某个截止值的区域的起始位置和结束位置。

有关如何过滤列表并查找这些区域的任何想法?

5 个答案:

答案 0 :(得分:1)

仅当第二个数字大于或等于0.6时才打印所有元素。

>>> lst = ['100  0.0', '101  0.7', '102  0.8', '103  0.7', '104  0.0', '105  0.7', '106  0.8', '107  0.0']
>>> [i for i in lst if float(i.split()[1]) >= 0.6]
['101  0.7', '102  0.8', '103  0.7', '105  0.7', '106  0.8']

答案 1 :(得分:1)

  

我想找到分数为.6或更高的地区

In [14]: [ int(l.split()[0]) for l in list if float(l.split()[1])>0.6 ]
Out[14]: [101, 102, 103, 105, 106]

答案 2 :(得分:0)

试试这个:

lst = ['100  0.0', '101  0.7', '102  0.8', '103  0.7', '104  0.0', '105  0.7', '106  0.8', '107  0.0']
start = False
results = []
prevEndPos = -1
for e in lst :
    elems = e.split()
    pos = int(elems[0])
    score = float(elems[1])
    print pos, score
    if score >= 0.6 :
        if start == False :
            start = True
            startPos = pos
        prevEndPos = pos
    else :
        if start :
            start = False
            endPos = prevEndPos
            results.append((startPos, endPos))

print results

注意并且不要命名变量'list',list是Python中的一个类型,即使代码可以工作,它也会隐藏Python名称。

您可以将结果保存在元组列表中(如上所述)或元组字典,列表列表或列表字典,无论两种方式都有效。

输出:

[(101, 103), (105, 106)]

输出意味着:第一区域在101结束处开始于103秒区域开始于105结束于106.

答案 3 :(得分:0)

你也可以这样使用内置方法filter

>>> filter(lambda s: float(s.split()[-1])>=0.6, list)
['101  0.7', '102  0.8', '103  0.7', '105  0.7', '106  0.8']

答案 4 :(得分:0)

您希望将字符串转换为浮点数,然后将它们与0.6进行比较并对其进行过滤。

在Python中有很少的方法可以做到这一点,最后一般是#34; Pythonic"

首先,对于新程序员来说,最容易理解的方法是迭代。从空列表开始,然后将成员附加到经过测试的列表中。

>>> tmp = []
>>> for item in lst:
...     _discard, test = item.split()
...     test = float(test)
...     if test > 0.6:
...         tmp.append(item)
>>> tmp
['101  0.7', '102  0.8', '103  0.7', '105  0.7', '106  0.8']

您可能遇到的另一种方法是使用一些名为filter的内置函数。 Filter接受一个函数,用于对其第二个参数中的每个项进行调用,即迭代。返回True的项目将移至新列表中。失败的项目将被删除。

为了使这项工作,我们使用一个带有lambda语法的匿名函数来测试我们的测试函数。如果你不熟悉语法,这会让你有点难以理解。更有经验的程序员通常会更喜欢这种方法,因为它非常简洁且非常清晰 - 术语filter清楚地说明了您打算做什么。

>>> filter(lambda item: float(item.split()[1]) > 0.6, lst)
['101  0.7', '102  0.8', '103  0.7', '105  0.7', '106  0.8']

现在最后 - 也许是最常见的方法 - 是使用所谓的列表理解。在这种方法中,您将所有内容捆绑在一行中,而不需要函数调用。它速度非常快,但对于新手来说可能有点混乱..

>>> [item for item in lst if float(item.split()[1]) >= 0.6]
['101  0.7', '102  0.8', '103  0.7', '105  0.7', '106  0.8']