如何清空列表元素的列表



所以我有这个工作代码,但问题是,它没有按照我喜欢的方式工作。有人知道吗?

import time
numlist1 =[[1],[2],[3]]
def listdecrement():
minVal=numlist1.index(min(numlist1)) # getting minimum value by index position
minVal_add = minVal+1
if minVal < minVal_add:
numlist1[minVal].clear() # deleting value in index with minimum value
time.sleep(0.2)
print("updating")
print(numlist1)
while True:
listdecrement()

输出:

[[], [2], [3]]
updating
[[], [2], [3]]
updating
[[], [2], [3]]

期望输出:

[[], [2], [3]]
updating
[[], [], [3]]
updating
[[], [], []]

您可以首先将列表[[],[2],[3]]展平为[2, 3],然后找到最小值2,然后将其作为列表[2]:进行搜索

import time
numlist1 =[[1],[2],[3]]
def listdecrement():
flat_list = [item for sublist in numlist1 for item in sublist]
minVal=numlist1.index([min(flat_list)]) # getting minimum value by index position
minVal_add = minVal+1
if minVal < minVal_add:
numlist1[minVal].clear() # deleting value in index with minimum value
time.sleep(0.2)
print("updating")
print(numlist1)
while True:
try:
listdecrement()
except ValueError:
break

输出

updating
[[], [2], [3]]
updating
[[], [], [3]]
updating
[[], [], []]

问题是min函数在包含空列表的列表上,它返回空列表作为索引,因为min实际上是0,这是最小的元素,因此您一直试图更改相同的索引,以使其清晰可见:

list_to_check = [[],[2],[3]]
min_index =list_to_check.index(min(list_to_check))
print(min_index)
# returns 0

要修复它,你必须检查min的合法元素(这意味着不是空的(,就像在这个修改的解决方案中一样:

import time
numlist1 =[[1],[2],[3]]
def listdecrement():
if (len([item for item in numlist1 if len(item)])>0):
minVal=numlist1.index(min(item for item in numlist1 if len(item)>0)) # getting minimum value by index position
else:
return
minVal_add = minVal+1
if minVal < minVal_add:
numlist1[minVal].clear() # deleting value in index with minimum value
time.sleep(0.2)
print("updating")
print(numlist1)
while True:
listdecrement()

输出:

updating
[[], [2], [3]]
updating
[[], [], [3]]
updating
[[], [], []]

修复

  1. 由于每个项都是一个单元素数组,因此给min一个键,使其可以处理[]
  2. 检查列表中的所有项目是否为空以防止无限循环

代码

import time
import sys
numlist1 =[[1],[2],[3]]
def listdecrement():
# add key to min so we compare item in list i.e. for
# for [2] => key function returns 2, 
# for [] => key function return sys.maxsize (max integer)
minVal=numlist1.index(min(numlist1, key = lambda v: v[0] if v else sys.maxsize)) # getting minimum value by index position
minVal_add = minVal+1
if minVal < minVal_add:
numlist1[minVal].clear() # deleting value in index with minimum value
time.sleep(0.2)
print("updating")
print(numlist1)
while any(x for x in numlist1): # True if any elements 
# are not [] in numlist1
listdecrement()

输出

updating
[[], [2], [3]]
updating
[[], [], [3]]
updating
[[], [], []]

最新更新