列表理解中断语句

时间:2013-12-24 08:01:03

标签: python

如何在找到特定元素时停止列表推导的迭代 例如:

list1=[a for a in list2 if a==someelement]

只要“a等于某个元素”,list1应该设置为a,不应再执行迭代。

5 个答案:

答案 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

技巧说明:

  1. 关键点是在列表理解中建立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元素。 (实际上不会爆发,但实际上在逻辑上)
  2. 使用end初始化列表理解中的变量。
  3. for end in [[]]中使用惰性解释来划分分支逻辑。

注意,这只是对列表理解的研究和利用,可能会给您一些启发,不应在生产代码中使用。