值错误:列表.删除(x) :x不在python中的列表问题中

2024-07-04 10:51:42 发布

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

有人能帮我解决这个问题吗?我已经做了大量的调试和故障排除,但遇到了困难。我不会复制整个脚本,而是复制失败的函数:

def deleteOperation(lname1, sKeys, lname2):
    delMaster = copy.deepcopy(lname2)
    for k, v in lname1:
        if k not in sKeys:
            delMaster.remove((k, v))
    return delMaster

以下是参数列表中的值:

^{pr2}$

此函数应该从列表中删除元素(5,'five')(7,'seven'),但当我执行它时,出现了一个错误:

ValueError: list.remove(x): x not in list 

实际上,我得到的所有值都是通过使用pyodbc连接到mssql数据库,读取两个表并将这些值保存在lname1和lname2中。在

有趣的是,如果我使用交互式pythonshell,并像上面打印的那样手动分配值,并运行与我的函数完全相同的命令,那么它可以正常工作。 你知道为什么会出现在我的剧本里吗? 感谢您的任何意见。在

另外,如果我在第4行放一个断点,我会看到所有正确的值,但它看起来是内部的列表.删除()失败了


Tags: 函数in脚本列表defnotremovelist
3条回答

帮你自己一个忙,用列表理解。那么您就不必担心Python3中的filter不返回list。这同样适用于Python2或Python3

>>> lname1 = [(1, 'one'), (3, 'three'), (5, 'five'), (7, 'seven')]
>>> sKeys = [1, 2, 3]
>>> [(x, y) for x, y in lname1 if x in sKeys]
[(1, 'one'), (3, 'three')]

这里有一个更简单的程序:

>>> lname1=[(1,'one'),(3,'three'),(5,'five'),(7,'seven')]
>>> sKeys=[1,2,3]
>>> filter(lambda (x,y) : x in sKeys, lname1)
[(1, 'one'), (3, 'three')]

创建一个新数组,该数组只包含来自lname1且在sKeys中有第一个元素的项。在

为了更好地诊断,可以像这样处理异常

def deleteOperation(lname1, sKeys, lname2):
    delMaster = copy.deepcopy(lname2)
    for k, v in lname1:
        if k not in sKeys:
            try:
                delMaster.remove((k, v))
            except ValueError:
                print("{} not found in {}".format((k,v), delMaster))
    return delMaster

复制列表然后从中删除是一种不寻常的方法。通常,将你想要的数据复制到一个新的数据结构中会更加高效和安全。你这样做有什么特别的原因吗?在

相关问题 更多 >

    热门问题