如何在找到特定元素时停止列表推导的迭代 例如:
list1=[a for a in list2 if a==someelement]
只要“a等于某个元素”,list1应该设置为a,不应再执行迭代。
答案 0 :(得分:4)
基于Volatility的解决方案:
list1 = [someelement] if someelement in list2 else []
答案 1 :(得分:3)
您可能想要使用takewhile。
>>> import itertools
>>> print(list(itertools.takewhile(lambda x: x<42, [2, 3, 4, 42, 5, 6, 7])))
[2, 3, 4]
答案 2 :(得分:2)
我知道你希望在列表理解中做到这一点,但是无法完成。
考虑这个解决方案。你可能会收紧这个,但我相信代码很容易被理解。
list1 = []
for a in list2:
list1.append(a)
if a == some_element: break
答案 3 :(得分:2)
如果你的'someelement'有固定值,那么你甚至不需要列表理解。您所要做的就是:
list1 = list2[:list2.index(someelement)]
你的工作已经完成:)
答案 4 :(得分:1)
如果您坚持将列表理解与$( document ).ready()
结合使用,则可以通过这种骇人听闻的方式实现目标:
(我发现您的问题有点模棱两可,返回util满足的所有元素break
,或者仅返回第一个someelement
。所以我写了两个版本。)
someelement
技巧说明:
list2 = [1, 2, 3, 3, 4, 3, 5]
someelment = 3
list1 = [a for end in [[]] for a in list2
if not end and not (a == someelment and end.append(42))]
# output: [1, 2, 3]
list1 = [a for end in [[]] for a in list2
if not end and a == someelment and not end.append(42)]
# output: [3]
条件,当end
不为空时,排除rest元素。 (实际上不会爆发,但实际上在逻辑上)end
初始化列表理解中的变量。for end in [[]]
中使用惰性解释来划分分支逻辑。注意,这只是对列表理解的研究和利用,可能会给您一些启发,不应在生产代码中使用。