📜  Python|将列表拆分为给定长度的子列表

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

Python|将列表拆分为给定长度的子列表

将列表拆分为子列表的问题非常普遍,但拆分给定长度的子列表并不常见。给定列表列表和长度列表,任务是将列表拆分为给定长度的子列表。

例子:

Input : Input = [1, 2, 3, 4, 5, 6, 7]
        length_to_split = [2, 1, 3, 1]

Output: [[1, 2], [3], [4, 5, 6], [7]]

方法 #1:使用islice将列表拆分为给定长度的子列表,是最优雅的方法。

# Python code to split a list
# into sublists of given length.
  
from itertools import islice
  
# Input list initialization
Input = [1, 2, 3, 4, 5, 6, 7]
  
# list of length in which we have to split
length_to_split = [2, 1, 3, 1]
  
# Using islice
Inputt = iter(Input)
Output = [list(islice(Inputt, elem))
          for elem in length_to_split]
  
# Printing Output
print("Initial list is:", Input)
print("Split length list: ", length_to_split)
print("List after splitting", Output)
输出:
Initial list is: [1, 2, 3, 4, 5, 6, 7]
Split length list:  [2, 1, 3, 1]
List after splitting [[1, 2], [3], [4, 5, 6], [7]]


方法 #2:使用zip是将列表拆分为给定长度的子列表的另一种方法。

# Python code to split a list into
# sublists of given length.
from itertools import accumulate
  
# Input list initialization
Input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  
# list of length in which we have to split
length_to_split = [2, 2, 3, 3]
  
# Using islice
Output = [Input[x - y: x] for x, y in zip(
          accumulate(length_to_split), length_to_split)]
  
# Printing Output
print("Initial list is:", Input)
print("Split length list: ", length_to_split)
print("List after splitting", Output)
输出:
Initial list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Split length list:  [2, 2, 3, 3]
List after splitting [[1, 2], [3, 4], [5, 6, 7], [8, 9, 10]]