相关疑难解决方法(0)

我的python prime finder中的无限范围?

我想在我的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)

我试图得到它所说的(无限数)实际上是一个无限数.有什么价值或东西我可以用来找到它吗?任何帮助将不胜感激!

python primes

4
推荐指数
2
解决办法
3287
查看次数

Python - CSV阅读器列表理解

我正在尝试使用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 csv list-comprehension list

4
推荐指数
1
解决办法
1587
查看次数

暂停Python生成器

我有一个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)

python generator

3
推荐指数
1
解决办法
956
查看次数

从python中的while循环内部返回值

我不知道这是一个简单的问题还是不可能的问题,但我找不到任何关于它的东西,所以我想我会问它。

当循环仍在运行时,是否可以从 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 循环在后台运行,但它只在被询问时才给出结果,或者类似的东西。

python real-time while-loop

3
推荐指数
1
解决办法
8679
查看次数

如何将数字列表中的每个块的总和小于n?

我试图寻找解决方案,但我对精确术语的无知并没有帮助,希望问题的标题和下面的代码是足够的解释.

这是我到目前为止的工作:

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]]

所以我猜逻辑需要进一步修改.

python

3
推荐指数
1
解决办法
326
查看次数

随时间返回多个值

好吧,有没有办法从函数返回一个值 - 方式如何return- 但不是停止函数 - 方式return呢?

我需要这个,所以我可以经常保持返回值.(由time.sleep()其他人提供的延迟.)

python

3
推荐指数
1
解决办法
1434
查看次数

Python函数返回列表还是作为生成器工作?

我正在尝试创建一个返回对象或作为生成器的函数.

这是一个坏主意,因为作为一种最佳实践,您希望函数可靠地返回相同类型的值,但为了科学的利益......

我正在使用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中产生每个项目,所以我可以返回在另一个函数中创建的生成器,但是有更好的方法吗?

python generator

3
推荐指数
2
解决办法
1612
查看次数

使用产量的函数有多少内存?

我无法理解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)

如果我迭代第一个函数返回的生成器,那么巨大的范围是否实际存储在内存中?

第二个功能怎么样?

如果我迭代第三个函数返回的生成器,那么我的程序会使用更少的内存(而不是仅仅创建该字典并直接迭代它)吗?

python memory yield generator

3
推荐指数
1
解决办法
1320
查看次数

可以同时运行两个无限循环吗?

我希望能够同时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'

提前致谢

python loops

3
推荐指数
1
解决办法
4883
查看次数

为什么 wordnet 中的 NLTK wn.all_synsets() 函数不返回同义词集列表?

我为这个问题编写代码:

没有下义词的名词同义词集的百分比是多少?您可以使用 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()) >= …

python nlp generator nltk wordnet

3
推荐指数
1
解决办法
2628
查看次数