如何逐个清空列表元素的列表?

2024-09-27 00:16:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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
[[], [], []]

Tags: 代码importaddindextimevaluedef方式
3条回答

修复

  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
[[], [], []]

问题在于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
[[], [], []]

您可以首先将列表[[],[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
[[], [], []]

相关问题 更多 >

    热门问题