我想写一个包含子列表的代码,它只有在列表的元素是某个数字时才会停止,例如9。
我已经尝试过使用不同的运算符,if语句。
def sublist (list):
return [x for x in list if x <9][7,8,3,2,4,9,51]上面列表的输出应该是:[7,8,3,2,4]
发布于 2019-06-11 16:06:45
列表理解实际上是为了进行映射/过滤组合。如果长度依赖于迭代中的某个先前状态,那么您最好使用for循环,它将更具可读性。然而,这是itertools.takewhile的一个用例。这里是这个任务的一个函数方法,只是为了好玩,有些人甚至认为它是可读性的:
>>> 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]发布于 2019-06-11 16:01:32
首先,使用像list这样的python关键字作为变量并不是一个好主意。
列表理解[x for x in list if x < 9]会过滤出小于9的元素,但它不会在遇到9时停止,而是会遍历整个列表
示例:
li = [7,8,3,2,4,9,51,8,7]
print([x for x in li if x < 9])输出为
[7, 8, 3, 2, 4, 8, 7]为了实现您正在寻找的东西,您需要一个for循环,当它遇到一个给定的元素(在本例中为9)时,它会中断。
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)输出为
[7, 8, 3, 2, 4]发布于 2019-06-11 16:03:29
您可以使用带有标记值(official doc)的iter()内置
l = [7,8,3,2,4,9,51]
sublist = [*iter(lambda i=iter(l): next(i), 9)]
print(sublist)打印:
[7, 8, 3, 2, 4]https://stackoverflow.com/questions/56538963
复制相似问题