gpt4 book ai didi

python - 删除嵌套列表中的列时列表分配索引超出范围

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:23 25 4
gpt4 key购买 nike

我有一个嵌套列表,每个列表中都有一些内容。它看起来像这样:

itemsOnShelf=[[3,5,6,8],
[2,3,7,3],
[4,2,2,3]]

每一列都属于一个项目,例如第一列/位置 0 是土 bean 。在我的程序中,我有一个函数可以为每一列添加所有项目并将它们保存到变量中,例如 potatoes=9

我还有一个保存这些变量的列表,它看起来像这样:

food=[potatoes, tomatoes, apples, peaches]

我还有一个函数,如果其中的项目总和小于特定数字(例如 11),该列将删除该列。

minimumNumberAllowed=11
smallestNumber=[]

def throwAway(thing,pos):
for item in smallestNumber:
if item==thing:
for shelf in itemsOnShelf:
for veg in shelf:
del shelf[pos]
print(itemsOnShelf)

接下来我有一些代码是这样的:

for item in food:
if item < minimumNumberAllowed:
smallestNumber.append(min(food))
print(smallestNumber)
for item in smallestNumber:
throwAway(potatoes,0)
throwAway(tomatoes,1)
throwAway(apples,2)
throwAway(peaches,3)

想法是,如果一列(项目)太少,将被删除。我的问题是,一旦删除一列,我就会收到“列表分配索引超出范围”错误,因为现在列数减少了,因此第 3 列将不存在。这是一个阻止我在编码中前进的问题。我尝试使用 while len(itemsOnShelf)<=3或其他数字,但它的作用是在删除该列之前停止,因此我收到一个未更改的列表。如何修复此索引超出范围错误,以便删除记录并自行更正索引?

编辑:我无法手动删除列,因为主列表中的项目数可以更改,所以我并不总是控制需要删除的列。

最佳答案

带有列表dicts您可以处理您的数据并通过它们的键名调用它们。现在删除一个值后,您将不再知道任何位置存在什么。

您现有的数据:

itemsOnShelf = [[3,5,6,8],
[2,3,7,3],
[4,2,2,3]]
food=['potatoes', 'tomatoes', 'apples', 'peaches']

可以修改为字典列表:

m = [dict(zip(food, i)) for i in itemsOnShelf]
print(m)

[{'tomatoes': 5, 'peaches': 8, 'apples': 6, 'potatoes': 3},
{'tomatoes': 3, 'peaches': 3, 'apples': 7, 'potatoes': 2},
{'tomatoes': 2, 'peaches': 3, 'apples': 2, 'potatoes': 4}]

你可以像这样得到每个食物键的总和:

total = {k: sum(i[k] for i in m) for k in m[0]}
print(total)

{'tomatoes': 10, 'potatoes': 9, 'apples': 15, 'peaches': 14}

当总和小于允许的最小值时,您可以删除所有字典的项目:

for i in m:
for k in total:
if total[k]<11:
i.pop(k)
print(m)

[{'peaches': 8, 'apples': 6},
{'peaches': 3, 'apples': 7},
{'peaches': 3, 'apples': 2}]

关于python - 删除嵌套列表中的列时列表分配索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47314786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com