我有一个清单,是这样的:
>>> list1 = ['Mary','had','a','little','lamb','which','was','very','naughty']
我需要从list1
中创建另一个列表(list2
),该列表是通过迭代list1
并找到元素little,然后将little和little后面的每个元素附加到list2
而创建的。你知道吗
做了一点阅读,发现从itertools的dropwhile只是为我的要求。你知道吗
>>> from itertools import dropwhile
>>> list2 = list(dropwhile(lambda l: 'little' not in l, list1))
>>> list2
['little', 'lamb', 'which', 'was', 'very', 'naughty']
完全符合我的要求。你知道吗
但是,现在我需要将结束元素指定为好吧,那又怎样我想要一个从小到非常的元素列表,包括以下两个:
>>>list3
['little', 'lamb', 'which', 'was', 'very']
我该如何用类似的方法做到这一点?你知道吗
不使用itertools的简单方法可能如下所示:
或者简单地写为:
可以使用自定义函数返回生成器:
演示:
注意这个解决方案比使用
list.index
要快,因为它的顺序是O(n),您使用它2次,但是对于前面的函数,您在iterable[i:]
中对所有列表进行1次迭代,另外还有一个索引,它的顺序小于O(n),所以速度更快。你知道吗为了更好地理解,请查看以下基准:
结果:
如果希望继续使用
itertools
(不关心性能):输出:
如果您关心性能,您应该定义一个自定义逻辑(感谢@Kasra):
相关问题 更多 >
编程相关推荐