Python|列表中第 i 个索引大小的子组
有时我们需要对元素进行分组,分组技术和要求也会相应变化。对元素进行分组的一种方法是按列表中的第 i 个大小,它将索引键的字典存储为后续大小为 i 的列表元素。
Input : [4, 7, 8, 10, 12, 15, 13, 17, 14, 5]
Output: {1: [4], 2: [7, 8], 3: [10, 12, 15], 4: [13, 17, 14, 5]}
让我们讨论一些可以做到这一点的方法。
方法 #1:使用islice()
+ 字典理解
slice 方法可用于将需要制作的列表块分组为字典的值,然后使用字典推导将其分配给它们的目标索引键。
# Python3 code to demonstrate
# Subgrouping of i'th index size in list
# using islice() + dictionary comprehension
from itertools import islice
# initializing list
test_list = [4, 7, 8, 10, 12, 15, 13, 17, 14, 5]
# printing original list
print("The original list : " + str(test_list))
# using islice() + dictionary comprehension
# Subgrouping of i'th index size in list
temp = iter(test_list)
res = {key: val for key, val in ((i, list(islice(temp, i)))
for i in range(1, len(test_list))) if val}
# printing result
print("The grouped dictionary is : " + str(res))
The original list : [4, 7, 8, 10, 12, 15, 13, 17, 14, 5]
The grouped dictionary is : {1: [4], 2: [7, 8], 3: [10, 12, 15], 4: [13, 17, 14, 5]}
方法 #2:使用itemgetter() + takewhile() + islice()
为了提高计算速度,我们引入了新的函数来执行这个特定的任务,takewhile 和 itemgetter 函数执行对切片值进行分组的任务。
# Python3 code to demonstrate
# Subgrouping of i'th index size in list
# using itemgetter() + takewhile() + islice()
from itertools import islice, takewhile
from operator import itemgetter
# initializing list
test_list = [4, 7, 8, 10, 12, 15, 13, 17, 14, 5]
# printing original list
print("The original list : " + str(test_list))
# using itemgetter() + takewhile() + islice()
# Subgrouping of i'th index size in list
temp = iter(test_list)
res = {key: val for key, val in
takewhile(itemgetter(1), ((i, list(islice(temp, i)))
for i in range(1, len(test_list))))}
# printing result
print("The grouped dictionary is : " + str(res))
The original list : [4, 7, 8, 10, 12, 15, 13, 17, 14, 5]
The grouped dictionary is : {1: [4], 2: [7, 8], 3: [10, 12, 15], 4: [13, 17, 14, 5]}