python使用某个列表的值_Python:如何将列表切片到某个值

本文介绍了一种结合平方根方法和bisect工具来优化素数查找范围的技术。通过使用bisect模块来确定待检查的素数列表,提高了素数判断效率。

我不太确定我是否完全理解了这个问题(如果我不理解,我将删除答案,如果它没有帮助的话),但在这种情况下,bisect模块(它只对排序列表有效,但如果有效,它相当快)可能会有一些帮助:#!/usr/bin/env python

# -*- coding: utf-8 -*-

import bisect

import math

primes = [2,3,5,7]

searchedPrime=11

lookedPosition = 1 + int(math.sqrt(searchedPrime))

checkUntil = primes[:bisect.bisect_left(primes, lookedPosition)]

print "I just have to check %s positions: %s" % (len(checkUntil), checkUntil)

这个输出

^{pr2}$

因此,也许sqrt方法和bisect工具的组合将帮助您确定要检查的素数范围。在

编辑:

哦,看看那个。。。我不知道sqrt的东西适合用来找到质数。。。但看起来是。。。在#!/usr/bin/env python

# -*- coding: utf-8 -*-

import bisect

import math

foundPrimes = []

def isPrime(number, otherPrimes):

global foundPrimes

lookedPosition = 1 + int(math.sqrt(number))

formerPrimes = foundPrimes[:bisect.bisect_left(foundPrimes, lookedPosition)]

for prime in formerPrimes:

if prime > 1 and number % prime == 0:

return False

return True

def getPrimes(upperLimit):

for i in range(1, upperLimit):

if isPrime(i, foundPrimes):

foundPrimes.append(i)

return foundPrimes

print "Primes: %s" % getPrimes(1000)

该输出:Primes: [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]

。。。在我看来很漂亮。。。:-)

p.S.:不要那样使用代码。。。这是废话。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值