Python 函数根据参数进行排序和操作
Python function sort and manipulate based on 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_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
,我如何根据参数进行排序? (例如,我可能希望根据最后一个元素的值对列表进行排序,或者我可能希望根据每个元素的总和进行排序。)
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)
它将打印 'None' 并且如果 xyz 不存在则不会引发错误。
2) 只需阅读手册即可。将 'key' 变量添加到 sorted
函数。 google python + 排序
您可以在您的条件中使用逻辑 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
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
,我如何根据参数进行排序? (例如,我可能希望根据最后一个元素的值对列表进行排序,或者我可能希望根据每个元素的总和进行排序。)
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)
它将打印 'None' 并且如果 xyz 不存在则不会引发错误。
2) 只需阅读手册即可。将 'key' 变量添加到 sorted
函数。 google python + 排序
您可以在您的条件中使用逻辑 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