我想在我的python素数查找器中获得无限范围!这是我的代码!
import math
print "Welcome to Prime Finder!"
option = raw_input("continue(y/n)")
if option == "y":
for num in range(1,(infinite number)):
if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
print num
Run Code Online (Sandbox Code Playgroud)
我试图得到它所说的(无限数)实际上是一个无限数.有什么价值或东西我可以用来找到它吗?任何帮助将不胜感激!
我正在尝试使用CSV阅读器有效地读取文件中的列.代码是:
import csv
csv.register_dialect('csvrd', delimiter='\t', quoting=csv.QUOTE_NONE)
with open('myfile.txt', 'rb') as f:
reader = csv.reader(f,'csvrd')
a0=[x[0] for x in reader]
a1=[x[1] for x in reader]
Run Code Online (Sandbox Code Playgroud)
我获取第一列中的值,但a1为空.如果我先写a1,那么a0是空的.
我知道一个简单的解决方案,插入
reader=[x for x in reader]
Run Code Online (Sandbox Code Playgroud)
但只是好奇的原因.当您从阅读器读取条目时,它是否被删除?
示例myfile.txt
c11 c21 c31
c21 c22 c32
Run Code Online (Sandbox Code Playgroud) 我有一个python生成器,它可以生成大量数据,占用大量内存.有没有办法检测处理过的数据是否已被使用生成器的代码"消耗",如果是,请暂停直到它被消耗?
def multi_grab(urls,proxy=None,ref=None,xpath=False,compress=True,delay=10,pool_size=50,retries=1,http_obj=None):
if proxy is not None:
proxy = web.ProxyManager(proxy,delay=delay)
pool_size = len(pool_size.records)
work_pool = pool.Pool(pool_size)
partial_grab = partial(grab,proxy=proxy,post=None,ref=ref,xpath=xpath,compress=compress,include_url=True,retries=retries,http_obj=http_obj)
for result in work_pool.imap_unordered(partial_grab,urls):
if result:
yield result
Run Code Online (Sandbox Code Playgroud)
逃离:
if __name__ == '__main__':
links = set(link for link in grab('http://www.reddit.com',xpath=True).xpath('//a/@href') if link.startswith('http') and 'reddit' not in link)
print '%s links' % len(links)
counter = 1
for url, data in multi_grab(links,pool_size=10):
print 'got', url, counter, len(data)
counter += 1
Run Code Online (Sandbox Code Playgroud) 我不知道这是一个简单的问题还是不可能的问题,但我找不到任何关于它的东西,所以我想我会问它。
当循环仍在运行时,是否可以从 while 循环返回值?基本上我想要做的是让一个向量在一个 while 循环中不断更新,但能够在不停止 while 循环的情况下在被询问时返回值。这可能吗?我是否只需要分解程序并将 while 循环放在一个单独的线程中,还是可以在一个函数中完成?
此外,我更喜欢一种计算量不高(显然)的方法,并且与速率限制的 while 循环兼容,因为这个方法肯定会受到速率限制。
同样,如果这是一个愚蠢的问题,请告诉我,我会删除它,但我无法找到有关此问题的文档。
我正在尝试使用以下代码来实现这一点:
def update(self, x_motion, y_motion, z_motion):
self.x_pos += self.x_veloc
self.y_pos += self.y_veloc
self.z_pos += self.z_veloc
self.x_veloc += self.x_accel
self.y_veloc += self.y_accel
self.z_veloc += self.z_accel
self.x_accel = x_motion[2]
self.y_accel = y_motion[2]
self.z_accel = z_motion[2]
while True:
self.update(x_motion, y_motion, z_motion)
print vector.x_accel
Run Code Online (Sandbox Code Playgroud)
至少在这些方面。重要的是这些在 while 循环之外返回,以便 while 循环在后台运行,但它只在被询问时才给出结果,或者类似的东西。
我试图寻找解决方案,但我对精确术语的无知并没有帮助,希望问题的标题和下面的代码是足够的解释.
这是我到目前为止的工作:
C = [1,1,1,1,2,3,1,1,1,2,1]
sub_C = []
chunked_C = []
counter = 0
for i in C:
counter += i
if counter <= 3:
sub_C.append(i)
else:
chunked_C.append(list(sub_C))
del sub_C[:]
counter = i
sub_C.append(i)
print chunked_C
Run Code Online (Sandbox Code Playgroud)
我希望chunked_C产生:[[1,1,1],[1,2],[3],[1,1,1],[2,1]]
不知道我哪里出错了,也许有人可以提供帮助.
编辑:我纠正了错别字.
也:
稍微修改一下,我需要将列表的不完整尾部分块,即值小于3但是我的数字用完了.
例如:
C = [1,1,1,1,2,3,1,1,1,2,1,1]
so chunked_C = [[1,1,1],[1,2],[3],[1,1,1],[2,1],[1]]
Run Code Online (Sandbox Code Playgroud)
希望有道理.
进一步修订:
如果C = [1,1,1,1,1,2,3,1,1,1,2,1]
chunked_C等于[[1,1,1],[1,1],[2],[3],[1,1,1],[2,1]]
所以我猜逻辑需要进一步修改.
好吧,有没有办法从函数返回一个值 - 方式如何return- 但不是停止函数 - 方式return呢?
我需要这个,所以我可以经常保持返回值.(由time.sleep()其他人提供的延迟.)
我正在尝试创建一个返回对象或作为生成器的函数.
这是一个坏主意,因为作为一种最佳实践,您希望函数可靠地返回相同类型的值,但为了科学的利益......
我正在使用Python 2,因此range返回一个列表,并且xrange是一个可迭代的(有趣的是也提供了一个__len__).
def xr(start, stop=None, step=1, gen=True):
if stop is None:
start, stop = 0, start
if gen == True:
for i in xrange(start, stop, step):
yield i
else:
return range(start, stop, step)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
File "<stdin>", line 8
SyntaxError: 'return' with argument inside generator
Run Code Online (Sandbox Code Playgroud)
为什么(除了显而易见的"你不能同时在函数中产生和返回",假设是正确的)它是否这样做?看看我的代码,不清楚为什么这样做会很糟糕.
我怎么试图绕过这个?我知道我可以返回xrange而不是从xrange中产生每个项目,所以我可以返回在另一个函数中创建的生成器,但是有更好的方法吗?
我无法理解yield关键字.
我理解程序执行时会发生什么影响,但我真的不明白它使用了多少内存.
我将尝试用例子来解释我的怀疑.
假设我们有三个功能:
HUGE_NUMBER = 9223372036854775807
def function1():
for i in range(0, HUGE_NUMBER):
yield i
def function2():
x = range(0, HUGE_NUMBER)
for i in x:
yield i
def function3(file):
with open(file, 'r') as f:
dictionary = dict(csv.reader(f, delimiter = ' '))
for k,v in dictionary.iteritems():
yield k,v
Run Code Online (Sandbox Code Playgroud)
如果我迭代第一个函数返回的生成器,那么巨大的范围是否实际存储在内存中?
第二个功能怎么样?
如果我迭代第三个函数返回的生成器,那么我的程序会使用更少的内存(而不是仅仅创建该字典并直接迭代它)吗?
我希望能够同时while True运行两个循环.这可能吗?
我是Python的新手,所以我不知道如何解决这个问题.
这是我制作的代码:
import time
def infiniteLoop():
while True:
print('Loop 1')
time.sleep(1)
infiniteLoop()
while True:
print('Loop 2')
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
现在,它只打印一个'循环1'
提前致谢
我为这个问题编写代码:
没有下义词的名词同义词集的百分比是多少?您可以使用 wn.all_synsets('n') 获取所有名词同义词集。
这是我的代码:
import nltk
from nltk.corpus import wordnet as wn
all_noun = wn.all_synsets('n')
print(all_noun)
print(wn.all_synsets('n'))
all_num = len(set(all_noun))
noun_have_hypon = [word for word in wn.all_synsets('n') if len(word.hyponyms()) >= 1]
noun_have_num = len(noun_have_hypon)
print('There are %d nouns, and %d nouns without hyponyms, the percentage is %f' %
(all_num, noun_have_num, (all_num-noun_have_num)/all_num*100))
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,输出是
<generator object all_synsets at 0x10927b1b0>
<generator object all_synsets at 0x10e6f0bd0>有名词 82115 个,无下位词名词 16693 个,百分比为 79.671193
但如果改变
noun_have_hypon = [word for word in wn.all_synsets('n') if len(word.hyponyms()) >= …