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]