首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >break list comprehension

break list comprehension
EN

Stack Overflow用户
提问于 2018-12-18 05:44:55
回答 2查看 0关注 0票数 0

如何根据条件break list comprehension,例如何时找到数字412?

码:

代码语言:javascript
复制
numbers = [951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544,
           615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941,
           386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399,
           162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217, 815, 67,
           104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717, 958, 609, 842,
           451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470, 743, 527]

even = [n for n in numbers if 0 == n % 2]

所以在功能上,你可以推断它应该会做的事情:

代码语言:javascript
复制
even = [n for n in numbers if 0 == n % 2 and break if n == 412]

更想要实现

  • 单行
  • 没有像itertools那样的其他花哨的库,如果可能的话,“纯python”(读:解决方案不应该使用任何import语句或类似)
EN

回答 2

Stack Overflow用户

发布于 2018-12-18 14:26:42

代码语言:javascript
复制
even = [n for n in numbers[:None if 412 not in numbers else numbers.index(412)] if not n % 2] 

刚刚上面的FJ代码并添加了一个三元组来检查412是否在列表中。即使412不在列表中,仍然是一行并且将工作。

票数 0
EN

Stack Overflow用户

发布于 2018-12-18 15:20:03

您可以将生成器表达式与itertools.takewhile()

代码语言:javascript
复制
even_numbers = (n for n in numbers if not n % 2)
list(itertools.takewhile(lambda x: x != 412, even_numbers))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档