我想编写一个包含子列表的代码,该子列表仅在列表的元素为某个数字(例如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]
答案 0 :(得分:2)
列表推导确实用于进行映射/过滤组合。如果长度取决于迭代中的某些先前状态,则最好使用for循环,它会更具可读性。但是,这是objext-object
的用例。这是完成此任务的一种实用方法,只是出于娱乐目的,有些甚至可能认为它可读性:
itertools.takewhile
答案 1 :(得分:1)
首先,使用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]
答案 2 :(得分:1)
您可以将iter()
内置使用前哨值(official doc)
l = [7,8,3,2,4,9,51]
sublist = [*iter(lambda i=iter(l): next(i), 9)]
print(sublist)
打印:
[7, 8, 3, 2, 4]