📜  Python|变量列表切片

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

Python|变量列表切片

对列表进行切片的问题在前面已经讨论过了,但有时我们需要根据其他列表中给出的输入来执行可变长度的切片。这个问题在 Web 开发中具有潜在的应用。让我们讨论一些可以做到这一点的方法。

方法 #1:使用itertools.islice() + 列表理解
列表推导可用于遍历列表,并使用 islice函数解决组件问题。

# Python3 code to demonstrate
# variable length slicing
# 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
# variable length slicing
temp = iter(test_list)
res = [list(islice(temp, part)) for part in slice_list]
  
# print result
print("The variable sliced list 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 is : [[1, 5], [3], [7, 8, 10], [11, 16, 9, 12]]

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

# Python3 code to demonstrate
# variable length slicing
# using zip() + accumulate() + list slicing
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
# variable length slicing
res = [test_list[i - j: i] for i, j in zip(accumulate(slice_list), slice_list)]
  
# print result
print("The variable sliced list 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 is : [[1, 5], [3], [7, 8, 10], [11, 16, 9, 12]]