我编写了一个代码,可以在列表中获得质数达到一定限度。 如上图所示。
MADV_NOHUGEPAGE
此代码在从嵌套循环中删除元素时显示错误。 错误如上所示。
import math
primes = []
for i in range(1, 101):
primes.append(i)
primes.remove(10) # Just removing for sake of experiment
tot = math.sqrt(len(primes))
for j in range(2, math.ceil(tot), 1):
for l in range(0, len(primes)):
k = j**2 + l*j
primes.remove(k)
primes.remove(12) # Just removing for sake of experiment
print(primes)
为什么会发生这种情况,因为此代码能够删除不在嵌套循环下但无法删除在嵌套循环下被删除的元素的元素。
这个问题有替代解决方案吗?
答案 0 :(得分:1)
您正在编辑列表时迭代列表,这是您永远不应该做的事!当您在此处迭代列表时:
len(primes)
删除素数时,您实际上正在更改import math
primes = []
for i in range(1, 101):
primes.append(i)
primeslst = []
def isPrime(number):
for i in range(2,int(number/2)+1):
if number%i == 0:
return True
return False
primes = [p for p in primes if not isPrime(p)]
print(primes)
的值!所以这导致代码不规则地行为,如:
在列表理解中,原始列表保持不变,而是创建一个新列表。 (SOURCE)
相反,您可以使用列表推导来实现相同的结果!
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:attendance");
String sel="SELECT DATEDIFF(d, checkin, checkin)"
+ " from checkinout where userid=1";
stmt=con.createStatement();
rs=stmt.executeQuery(sel);
while(rs.next()){
System.out.println(rs.getString(1));
}
System.out.println("Connected");
}catch(Exception e){
System.out.println(e);
}
希望它有所帮助!