首页 > 解决方案 > IndexError:列表索引超出创建新列表的范围

问题描述

我正在从前两个列表中列出一个列表。我有 2 个列表boxSizeitem. 我必须制作一个重复的新列表finalArray, 例如&然后我想将数组创建为itemboxSize timesboxSize = [3,2,1]item = [1,6,4]finalArray = [1,1,1,6,6,4]

def maxSize(boxSize, item, truckSize):
    c = 0
    finalArray = []
    for i in range(len(boxSize)):
        for j in range(boxSize[i]):
            finalArray[c] = item[i]
            c += 1
    finalArray.sort(reverse= True)
    maxi = 0
    finalArray = finalArray[:truckSize]
    for i in range(truckSize):
        maxi += maxi + finalArray[i]
    return maxi

The error I'm getting is IndexError: list index out of range at finalArray[c] = item[i]

标签: pythonlist

解决方案


一种更清洁的方法:

from itertools import starmap, repeat

boxSize = [3,2,1]; item = [1,6,4]
smap = starmap(repeat, zip(item, boxSize))

output = [n for rep in smap for n in rep]

>>>output

[1, 1, 1, 6, 6, 4]

Zip将 item 和 boxSize 配对(成对)。

重复应用于每个拉链。所以每对的第一个元素是重复每对的第二个元素指定的次数。

Starmap对这些对应用重复。


推荐阅读