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

时间:2015-12-10 14:07:44

标签: python sorting python-3.x arguments

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_limitNone,则更改if条件

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

if i[0] < index_value:

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

if sum(i) < sum_limit:

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

2 个答案:

答案 0 :(得分:3)

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

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)

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

index_value

答案 1 :(得分:2)

1)你可以使用

if ((sum_limit is not None) and sum(i) <= sum_limit) or ((index_value is not None)) and i[0] < index_value):

如果sum_limit == None,则跳过评估sum(i) <= sum_limit。 与index_value

相同

示例:

print (None and xyz) or (True or xyz)

如果xyz不存在,它将打印'None'并且不会引发错误。

2)阅读手册。将“key”变量添加到sorted函数中。 google python + sort