📜  Python – 自定义切片列表中的子列表最大值

📅  最后修改于: 2022-05-13 01:55:25.139000             🧑  作者: Mango

Python – 自定义切片列表中的子列表最大值

有时,在处理数据时,我们可能会遇到一个问题,即我们需要提取的不是整个列表的最大值,而是某些自定义损坏的子列表的最大值。这种问题比较特殊,在很多领域都会出现。让我们讨论可以执行此任务的某些方式。

方法 #1:使用itertools.islice() + max() + 列表理解
上述方法的组合可以用来解决这个问题。在此 islice() 用于执行自定义切片,列表推导用于迭代,max() 用于计算最大值。

# Python3 code to demonstrate
# Sublist Maximum in custom sliced List
# using itertools.islice() + list comprehension
from itertools import islice
  
# initializing test list
test_list = [1, 5, 3, 7, 8, 10, 11, 16, 9, 12]
  
# initializing slice list 
slice_list = [2, 1, 3, 4]
  
# printing original list 
print("The original list : " + str(test_list))
  
# printing slice list 
print("The slice list : " + str(slice_list))
  
# using itertools.islice() + list comprehension
# Sublist Maximum in custom sliced List
temp = iter(test_list)
res = [max(list(islice(temp, part))) for part in slice_list]
  
# print result
print("The variable sliced list maximum is : " + str(res))
输出 :
The original list : [1, 5, 3, 7, 8, 10, 11, 16, 9, 12]
The slice list : [2, 1, 3, 4]
The variable sliced list maximum is : [5, 3, 10, 16]

方法 #2 : 使用zip() + accumulate() + max() + 列表切片
除了使用列表推导来执行绑定任务外,该方法还使用 zip函数将子列表元素保持在一起,累积函数将元素连接起来,并使用切片来构造所需的切片。 max() 用于执行最大值。

# Python3 code to demonstrate
# Sublist Maximum in custom sliced List
# using zip() + accumulate() + list slicing + max()
from itertools import accumulate
  
# initializing test list
test_list = [1, 5, 3, 7, 8, 10, 11, 16, 9, 12]
  
# initializing slice list 
slice_list = [2, 1, 3, 4]
  
# printing original list 
print("The original list : " + str(test_list))
  
# printing slice list 
print("The slice list : " + str(slice_list))
  
# using zip() + accumulate() + list slicing + max()
# Sublist Maximum in custom sliced List
res = [max(test_list[i - j: i]) for i, j in zip(accumulate(slice_list), slice_list)]
  
# print result
print("The variable sliced list maximum is : " + str(res))
输出 :
The original list : [1, 5, 3, 7, 8, 10, 11, 16, 9, 12]
The slice list : [2, 1, 3, 4]
The variable sliced list maximum is : [5, 3, 10, 16]