这与Python:如何基于条件拆分列表?以及https://nedbatchelder.com/blog/201306/filter_a_list_into_two_parts.html非常相似,但不同之处在于,我想将列表在第一个未满足谓词的元素处分成两个部分。
>>> divide_list(lambda x: x < 7, list(range(10)))
([0, 1, 2, 3, 4, 5, 6], [7, 8, 9])
>>> divide_list(lambda x: x < 7, [1, 3, 5, 7, 9, 5])
([1, 3, 5], [7, 9, 5])
>>> divide_list(lambda x: x < 7, [7, 9, 5])
([], [7, 9, 5])
>>> divide_list(lambda x: x < 7, [1, 3, 5])
([1, 3, 5], [])
>>> divide_list(lambda x: x['a'], [{'a': True, 'b': 1}, {'a': True}, {'a': False}])
([{'a': True, 'b': 1}, {'a': True}], [{'a': False}])
需要注意的事项:
- 输入列表可能未排序
- 输入列表可能包含重复元素
- 理想情况下,我们不希望多次评估条件(对于每个元素,如果值重复那么没问题)
- 最好接受迭代器作为输入(即只能对输入数据进行一次遍历)
- 返回迭代器是可以接受的