标签: generator

在python list comprehension中设置变量

如果我在每个循环的生成器中完成了2或3个相同的计算,有没有办法将它们设置为变量?

一个简单的例子是这样的:

#Normal
[len( i ) for i in list if len( i ) > 1]

#Set variable
[x for i in list if x > 1; x = len( i )]
Run Code Online (Sandbox Code Playgroud)

在任何人说len( i )这么快之前,差异可以忽略不计,我也意味着进行其他计算,使用len只是让它更容易阅读.另外,如果有办法,你会如何设置多个变量?

如果以前曾被问过,请道歉,但我已经四处寻找并没有找到任何东西.

python generator

0
推荐指数
1
解决办法
654
查看次数

Python生成器增量

我有一个循环:

total = 0
for s in sums:
    total += s[0]
Run Code Online (Sandbox Code Playgroud)

这里sums是从数据库中,通过Django的检索对象的列表:

sums = Source_types.objects.values_list('source_sum')
Run Code Online (Sandbox Code Playgroud)

我想将此代码移动到单行生成器中.

python django generator increment

0
推荐指数
1
解决办法
159
查看次数

在andom索引处插入字符串不能正常工作

我正在研究一个随机密码生成器,我希望有一个用户可以输入的基本字符串,并在基本字符串内部或周围生成随机字符.我的问题是,只要它用基本字符串生成随机字符,它们就会插入前面(第0个索引).这是我的代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var baseStringTextField: UITextField!
    @IBOutlet weak var lowerCaseSwitch: UISwitch!
    @IBOutlet weak var upperCaseSwitch: UISwitch!
    @IBOutlet weak var numberSwitch: UISwitch!
    @IBOutlet weak var numberOfCharactersSlider: UISlider!
    @IBOutlet weak var numberOfCharsLabel: UILabel!

    let lower = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t","u","v","w", "x", "y", "z"]
    let upper = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
    let numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] …
Run Code Online (Sandbox Code Playgroud)

arrays numbers generator ios swift

0
推荐指数
1
解决办法
313
查看次数

Python:随机生成器中的双打

我试图创建一个生成器,它将寻找1到m范围内的n个随机整数.下面的代码完全相同,但它有时会返回先前打印过的数字的两倍.有谁知道我怎么编辑它?另一件事,但更设计的是,我如何订购我的打印,以便数字有序?

import random

def hwset(m,n):
    i=0
    for i in range(0,n):
        print random.randrange(1,m+1,1)
Run Code Online (Sandbox Code Playgroud)

python random generator

0
推荐指数
1
解决办法
116
查看次数

拒绝承诺未定义

我试过下面的函数使用co和javascript promise测试,fulfill会成功返回但是reject没有,并且捕获错误未定义.并且流程无法继续.为什么?

错误:

> at GeneratorFunctionPrototype.next (native)
    at onFulfilled (/Users/../project/app/node_modules/co/index.js:65:19)
    at runMicrotasksCallback (node.js:337:7)
    at process._tickDomainCallback (node.js:381:11)
Run Code Online (Sandbox Code Playgroud)

码:

domain.run(function() {

  var testPromise = function() {
    return new Promise(function (fulfill, reject){
      //reject('error');
      reject(new Error('message'));
    });
  };


co(function *() {
  var d = yield testPromise();
  console.log(d);
  res.send('fin');
}).catch(onerror);
function onerror(error) { console.error(error.stack); }

});
domain.on('error', function(error) { console.error(error); });
Run Code Online (Sandbox Code Playgroud)

javascript generator node.js promise co

0
推荐指数
1
解决办法
8779
查看次数

Pythonic方式循环纯粹基于副作用的理解

在不关心返回值的情况下执行完整生成器理解的最pythonic方法是什么,而操作纯粹是基于副作用的?

一个例子是基于这里讨论的谓词值来拆分列表.想到编写生成器理解是很自然的

split_me = [0, 1, 2, None, 3, '']
a, b = [], []
gen_comp = (a.append(v) if v else b.append(v) for v in split_me)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我能想出的最佳解决方案是使用 any

any(gen_comp)
Run Code Online (Sandbox Code Playgroud)

然而,对于没有看过这种模式的人来说,这并不是很明显.是否有更好的方法来循环完全理解而不保留内存中的所有返回值?

python list-comprehension generator

0
推荐指数
2
解决办法
482
查看次数

使用生成器进行计数的最佳做法是什么

假设我有一个列表:

my_list = range(10)
Run Code Online (Sandbox Code Playgroud)

而且我想计算列表中有多少偶数.请注意,我对这些值不感兴趣,我只想要它们的数量.所以我可以:

len( [0 for i in my_list if i % 2 == 0] ) # Method 1
len( [i for i in my_list if i % 2 == 0] ) # Method 2
len( [_ for i in my_list if i % 2 == 0] ) # Method 3
Run Code Online (Sandbox Code Playgroud)

从速度或内存的角度来看,上述任何一种方法都比其他方法更好吗?

实际上我甚至不需要构建列表,但我不想:

counter = 0
for item in my_list:
   if item % 2 == 0:
      counter += 1
Run Code Online (Sandbox Code Playgroud)

那么,哪一个是用发电机计数的好方法?

PS:我的案例中的列表有更多内存繁重的项目,这就是为什么我想要尽可能优化.

python generator count

0
推荐指数
1
解决办法
58
查看次数

如果阵列中的数字太多,则素数生成器会因内存错误而崩溃

我有一个素数生成器,我很好奇看到有多小和我有多快可以让素数生成器基于优化等等:

from math import sqrt
def p(n):  
  if n < 2: return []  
  s = [True]*(((n/2)-1+n%2)+1)  
  for i in range(int(sqrt(n)) >> 1):  
    if not s[i]: continue  
    for j in range( (i**i+(3*i) << 1) + 3, ((n/2)-1+n%2), (i<<1)+3): s[j] = False   
    q = [2]; q.extend([(i<<1) + 3 for i in range(((n/2)-1+n%2)) if s[i]]); return len(q), q  
print p(input())
Run Code Online (Sandbox Code Playgroud)

发电机很棒!它速度超快,可以随意试用.但是,如果您输入的数字大于10 ^ 9或10 ^ 10(我认为),它将从内存错误中崩溃.我无法弄清楚如何扩展它使用的内存,以便它可以占用所需的内存.任何建议将不胜感激!

我的问题与问题非常相似,但这是Python,而不是C.

编辑:这是我尝试运行10 ^ 9时获得的与内存相关的回溯之一.

python prime.py
1000000000
Traceback (most recent call last):
  File "prime.py", line 9, …
Run Code Online (Sandbox Code Playgroud)

python primes generator python-2.7

0
推荐指数
1
解决办法
390
查看次数

Python CSV阅读器:没有获取线功能?

我一直在这里阅读CSV模块上的Python文档:https://docs.python.org/2/library/csv.html

我注意到它没有提到任何方式让读者对象返回它当前正在读取的行数,或者它当前处于哪个迭代.这似乎是一个广泛需要的功能.所以,我想知道如何做到这一点:

reader = csv.DictReader(readFile)
    for row in reader:
        # do something 
        # now want to find the line number that row corresponds to
Run Code Online (Sandbox Code Playgroud)

或者,如果不可能,为什么会这样.

python csv iterator generator

0
推荐指数
1
解决办法
111
查看次数

有条件地在python中打印出行

我有一个字符串列表.我希望打印出符合条件的列表中的字符串.清单如下:

In [5]: L = ["John and Mary", "Leslie", "Iva and Mark Li"]
Run Code Online (Sandbox Code Playgroud)

我希望打印出L中的每个字符串,其中包含一个字符串and-

'John and Mary', 'Iva and Mark Li'
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

In [6]: def grep(pattern, line):
            if pattern in line:
                print line

In [7]: [grep("and", I) for I in L]
Run Code Online (Sandbox Code Playgroud)

这回来了

John and Mary
Iva and Mark Li
Out[7]: [None, None, None]
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法呢?谢谢!!

python string generator

0
推荐指数
2
解决办法
42
查看次数