我有一个由位置和分数组成的python列表。
我需要找到一种编写代码的方法,该代码将指定分数超过某个截止值的区域的起始位置和结束位置。
有关如何过滤列表并查找这些区域的任何想法?
答案 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']