Skip to main content
 首页 » 编程设计

Python 函数基于参数进行排序和操作

2025年05月04日32cloudgamer

def some_generator(sum_limit, index_value): 
    """ 
    >>> list(some_generator(20, 4)) 
    [[1, 2, 3], [2, 5, 6], [3, 7, 10], [4, 5, 11], [3, 5, 15], [4, 5, 9]] 
 
    """ 
    a = [[1, 2, 3], [2, 5, 6], [3, 7, 10], [4, 5, 11], 
         [3, 5, 15], [4, 5, 9], [4, 6, 12], [1, 5, 19]] 
    for i in a: 
        if sum(i) <= sum_limit or i[0] < index_value: 
            yield i 
        else: 
            break 
 
 
def foo(_generator): 
    """ 
    >>> foo(some_generator(20, 4)) 
    [[1, 2, 3], [2, 5, 6], [3, 5, 15], [3, 7, 10], [4, 5, 9], [4, 5, 11]] 
    """ 
    x = list(_generator) 
    return sorted(x) 

1) 对于函数some_generator ,我该如何实现:如果 sum_limit是None , 然后改变 if 条件

if sum(i) <= sum_limit or i[0] < index_value:

到

if i[0] < index_value:

反之亦然(如果 index_value 是 None ,则将 if 条件更改为:

if sum(i) < sum_limit:

2) 对于函数 foo ,如何根据参数进行排序? (例如,我可能希望根据最后一个元素的值对列表进行排序,或者我可能希望根据每个元素的总和进行排序。)

请您参考如下方法:

您可以在您的条件中使用逻辑 and 并且您可以在 sorted 函数中使用 key 参数进行排序:

def some_generator(iterator ,sum_limit, index_value): 
    """ 
    >>> list(some_generator(20, 4)) 
    [[1, 2, 3], [2, 5, 6], [3, 7, 10], [4, 5, 11], [3, 5, 15], [4, 5, 9]] 
 
    """ 
    for i in iterator: 
        if (sum_limit and (sum(i) <= sum_limit)) or  (index_value and (i[0] < index_value)): 
            yield i 
        else: 
            break 
 
 
def foo(_generator, custom_key = None): 
    """ 
    >>> foo(some_generator(20, 4)) 
    [[1, 2, 3], [2, 5, 6], [3, 5, 15], [3, 7, 10], [4, 5, 9], [4, 5, 11]] 
    """ 
    x = list(_generator) 
    return sorted(x,key= custom_key) 
 
iterator = [[1, 2, 3], [2, 5, 6], [3, 7, 10], [4, 5, 11], 
         [3, 5, 15], [4, 5, 9], [4, 6, 12], [1, 5, 19]] 
 
print foo(some_generator(iterator,20, 4), custom_key=sum) 

请注意,因为在 python 2.X 中,您可以比较差异类型对象,例如 None 和 integer,因为每个整数都大于 None 并且因为 sum_limit 和 index_vallue 应该比你的项目更大,如果它们是 None 它将被评估为 False,因此条件将取决于其他部分,你不需要检查sum_limit 和 index_value 的有效性。

>>> 0>None 
True 
>>> 4>None 
True 
>>> -4>None 
True 
>>> 4<None 
False 
>>> 0<None 
False 
>>> -2<None 
False