我有以下代码:
max=max(len(j.links) for j in roads.junctions())
min=min(len(j.links) for j in roads.junctions())
Run Code Online (Sandbox Code Playgroud)
roads.junctions()返回一个包含近100万个联结的列表.有没有办法在一行中找到同一次迭代中项目的最小值和最大值(而不是编写一个计算它们的函数)?
你不能在一行中得到最小值和最大值,但你可以通过一个简单的循环得到它们:
min_value, max_value = float('inf'), float('-inf')
for j in roads.junctions():
value = len(j.links)
if value < min_value:
min_value = value
if value > max_value:
max_value = value
Run Code Online (Sandbox Code Playgroud)
这产生具有相同的复杂性,因为值min()和max():O(N),所以线性复杂性.它还单独查看每个值,不要求所有值都在内存中的单个列表中.
你总是可以将它包装成一个函数:
def min_and_max(iterable):
min_value, max_value = float('inf'), float('-inf')
for value in iterable:
if value < min_value:
min_value = value
if value > max_value:
max_value = value
return min_value, max_value
min_value, max_value = min_and_max(len(j.links) for j in roads.junctions())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3313 次 |
| 最近记录: |