如何检查嵌套列表中有多少条目,然后删除每个项目的最后 3 个值以外的所有其他值?

How do I check how many entries there are within a nested list and then remove all other values other than the last 3 for each item?

我有一份水果清单:

fruit = [[['apples', '2'], ['apples', '7']], [['banana','5'], ['banana','6'], ['banana','3'], ['banana','9'], ['banana','1']], [['grapes','10'], ['grapes','0'], ['grapes','7']]]

正如您在我的购物清单上看到的那样,它是一个嵌套清单,其中相同的项目被分组在一个清单中。我想做的是:

  1. 检查每个水果有多少条目
  2. 如果水果的条目数不超过 3 个,则保持原样
  3. 如果水果的条目数超过 3,则删除该水果的条目(从该水果的 fruit[x][0] 开始)直到剩下最后三个水果条目。例如,这将对上述列表的 'banana' 执行此操作,因为 'banana' 的条目数为 5,因此前两个条目 (['banana','5'], ['banana','6']) 将被删除,并且 ['banana','3'], ['banana','9'], ['banana','1'] 会留下来。

如果正确完成,生成的代码将是:

fruit = [[['apples', '2'], ['apples', '7']], [['banana','3'], ['banana','9'], ['banana','1']], [['grapes','10'], ['grapes','0'], ['grapes','7']]]

我该怎么做?我尝试使用 for 循环检查条目数,但我不知道如何删除列表中的内容。

谢谢:)

您可以使用带有 if/else 语句的列表理解,如下所示:

fruits = [[['apples', '2'], ['apples', '7']], [['banana','5'], ['banana','6'], ['banana','3'], ['banana','9'], ['banana','1']], [['grapes','10'], ['grapes','0'], ['grapes','7']]]

answer = [fruit if len(fruit) <= 3 else fruit[-3:] for fruit in fruits]
print(answer)

输出

[[['apples', '2'], ['apples', '7']],
 [['banana', '3'], ['banana', '9'], ['banana', '1']],
 [['grapes', '10'], ['grapes', '0'], ['grapes', '7']]]

遍历主列表,用最后三个对象替换每个项目列表(这对已经短于或等于 3 个对象的列表没有任何作用):

for i in range(len(fruit)):
    fruit[i] = fruit[i][-3:]

或者,以理解形式:

fruit = [f[-3:] for f in fruit]