首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表仅在列表元素为数字7时停止

列表仅在列表元素为数字7时停止
EN

Stack Overflow用户
提问于 2019-06-11 15:54:32
回答 3查看 71关注 0票数 0

我想写一个包含子列表的代码,它只有在列表的元素是某个数字时才会停止,例如9。

我已经尝试过使用不同的运算符,if语句。

代码语言:javascript
复制
def sublist (list): 
return [x for x in list if x  <9]

[7,8,3,2,4,9,51]上面列表的输出应该是:[7,8,3,2,4]

EN

回答 3

Stack Overflow用户

发布于 2019-06-11 16:06:45

列表理解实际上是为了进行映射/过滤组合。如果长度依赖于迭代中的某个先前状态,那么您最好使用for循环,它将更具可读性。然而,这是itertools.takewhile的一个用例。这里是这个任务的一个函数方法,只是为了好玩,有些人甚至认为它是可读性的:

代码语言:javascript
复制
>>> from itertools import takewhile
>>> from functools import partial
>>> import operator as op
>>> list(takewhile(partial(op.ne, 9), [7,8,3,2,4,9,51]))
[7, 8, 3, 2, 4]
票数 2
EN

Stack Overflow用户

发布于 2019-06-11 16:01:32

首先,使用像list这样的python关键字作为变量并不是一个好主意。

列表理解[x for x in list if x < 9]会过滤出小于9的元素,但它不会在遇到9时停止,而是会遍历整个列表

示例:

代码语言:javascript
复制
li = [7,8,3,2,4,9,51,8,7]
print([x for x in li if x < 9])

输出为

代码语言:javascript
复制
[7, 8, 3, 2, 4, 8, 7]

为了实现您正在寻找的东西,您需要一个for循环,当它遇到一个给定的元素(在本例中为9)时,它会中断。

代码语言:javascript
复制
li = [7,8,3,2,4,9,51]

res = []
item = 9

#Iterate over the list
for x in li:
    #If item is encountered, break the loop
    if x == item:
        break
    #Append item to list
    res.append(x)

print(res)

输出为

代码语言:javascript
复制
[7, 8, 3, 2, 4]
票数 1
EN

Stack Overflow用户

发布于 2019-06-11 16:03:29

您可以使用带有标记值(official doc)的iter()内置

代码语言:javascript
复制
l = [7,8,3,2,4,9,51]
sublist = [*iter(lambda i=iter(l): next(i), 9)]
print(sublist)

打印:

代码语言:javascript
复制
[7, 8, 3, 2, 4]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56538963

复制
相关文章

相似问题

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