【问题标题】:How can I pass a KeyError 2 in a set in Python?如何在 Python 的集合中传递 KeyError 2?
【发布时间】:2013-12-24 14:50:21
【问题描述】:

我想删除指出该元素在 Set 中不存在的 Key Error 2。我已经尝试过 set(None),我尝试过除了 KeyError:pass...这些都不起作用。有什么想法吗?

def p6():
    myPossiblePrimes= set()
    myDividersList= set()


    for x in range(2,15):
        for y in range(2,10):
            if (x%y != 0):

                myPossiblePrimes.add(x)
                myDividersList.add(y)
            else :
                myPossiblePrimes.remove(x)
                print (x, 'does equally divide with', y, ' and I removed it from the list')

    return[print('These are my possible primes:',list(enumerate(myPossiblePrimes)), 'and these are my dividers', list(enumerate(myDividersList)))]

这是一些返回值,这就是为什么我添加了 else 以将其从可能中删除 素数:

8 与 2 等分,而我什么也没做 检查 9 不等于 2,我将 9 添加到可能的集合中 9 和 3 平分,我什么也没做 检查 10 与 2 等分,我什么也没做 勾选

错误:

文件“C:\Python33\assignment 2.1.py”,第 165 行,在 p6 myPossiblePrimes.remove(x) 关键错误:2

【问题讨论】:

  • 你的错误在哪里?可以给个回溯吗?

标签: python set


【解决方案1】:

您可以在删除之前检查密钥:

 if (x%y != 0): 
       myPossiblePrimes.add(x)
       myDividersList.add(y)
 elif x in myPossiblePrimes:
       myPossiblePrimes.remove(x)

但是您的逻辑存在问题,您太贪心而无法将数字添加到素数列表中。试试这样的:

 for x in range(2,15):
    for y in range(2,10):
        if x%y == 0 and x != y:
            myDividersList.add(y)
            break
    else: # the part below is executed if for loop ended without a break
        myPossiblePrimes.add(x)

【讨论】:

  • 它不起作用...它说它;正在删除它但实际上不是 if (x%y != 0): myPossiblePrimes.add(x) myDividersList.add(y) elif (x in myPossiblePrimes): myPossiblePrimes.remove(x) print (x, 'does equals divide with', y, ' and I remove it from the list') else: break
  • 我是个菜鸟...让我考虑一下:D
  • 它对我不起作用,因为必须对列表进行排序......以便我可以提取某个素数:D
【解决方案2】:

为了减少你的代码问题:

if (x%y != 0):
    myPossiblePrimes.add(x)
else :
    myPossiblePrimes.remove(x)

如果您还没有添加它,如何删除它?

【讨论】:

  • 只想添加like None 什么的,让它通过。我明白你在说什么,你是对的。问题是它必须被删除,否则它会留在那里并且不会是正确的。谢谢
  • 你可以先检查一下:if x in myPossiblePrimes:
  • @AndraV 你说it must be removed, otherwise it will stay there是什么意思?您没有将x 添加到myPossiblePrimes,那么如果它一开始就没有放在那里,它怎么会“留在那里”呢?
  • 因为它将从头开始放置,当计数会更高时...我从 Python Shell 中举例说明了发生了什么
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多