一旦我得到超过特定条件限制的项目,如何停止列表理解

How do I stop list comprehension once i get an item above certain condition limit

我需要稍微说明一下如何处理它。我有一个列表 'm',我正在遍历以找到超过某个限制的整数,比如“90”。 一旦达到此限制 和 post 项目 (满足条件),我想停止迭代。 例如,如果 98.877 是项目,我必须将其附加到新列表(见下面的代码片段)。

问题

我的挑战是我只能扩展满足条件的项目之前的项目。非常感谢你的帮助。

m = [('a', 0.6720430254936218), ('a', 0.9672043025493621), ('a', 0.6720430254936218), ('a', 0.6720430254936218), ('a', 0.8720430254936218), ('a', 0.6720430254936218), ('a', 0.6720430254936218), ('c', 0.6720430254936218), ('c', 0.6720430254936218), ('c', 0.6720430254936218), ('c', 0.6720430254936218), ('o', 0.6720430254936218), ('o', 0.6720430254936218), ('o', 0.6720430254936218), ('o', 0.7720430254936218), ('o', 0.6720430254936218), ('r', 0.6720430254936218), ('r', 0.6720430254936218), ('r', 0.9720430254936218), ('r', 0.6720430254936218), ('d', 0.6720430254936218), ('i', 0.6720430254936218), ('i', 0.6720430254936218), ('i', 0.6720430254936218), ('n', 0.6720430254936218), ('n', 0.6720430254936218), ('n', 0.6720430254936218),]

simis = []
def end_of_loop():
    raise StopIteration

simis.extend(list(end_of_loop() if item[1]*100 >= 90 else item[1]*100 for item in m))

print(simis)

从技术上讲,这是一个生成器表达式,而不是 list-comprehension。 无论如何,您似乎只想查找并附加满足条件的第一个项目,因此您只需使用 next:

simis.append(next(item for item in m if item[1]*100 >= 90)[1]*100)