标签: generator

Python生成器输出是整数而不是数字

我刚刚在一周前了解了Python中的生成器.根据我的理解,'yield'返回一个生成器对象而不是整个数组.

这是我为获取整数的数字而编写的代码:

def getDigits(m):
    for d in str(m):
        yield int(m)
Run Code Online (Sandbox Code Playgroud)

这应该返回作为生成器对象传递给它的整数的数字.但当我这样做时:

for i in getDigits(123):
    print i
Run Code Online (Sandbox Code Playgroud)

我得到的输出为:

123
123
123
Run Code Online (Sandbox Code Playgroud)

代替:

1
2
3
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?难道我做错了什么?

python generator

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

Python上的变量"生成器"使用其他变量

我想知道,如果有可能创建变量并在Python上命名使用字符串和其他变量.这对我正在帮助我真的很有帮助.

例如,我想创建10个变量:

var0
var1
var2
...
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的"for"循环:

for i in range(10):
    'var'+str(i) = 0
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误.请帮忙!

任何帮助将非常感激.

python variables loops for-loop generator

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

与迭代器相比,生成器有什么好处?

可能重复:
Python生成器与迭代器之间的差异

生成器在Python中看起来很重要,偶尔会向它们添加新功能,依此类推.

据我所知,相反,生成器可以始终使用带有迭代器接口的对象.(通常)更简洁是发电机的唯一好处还是我错过了什么?

python generator

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

生成器卡在列表理解中的无限循环中?

这很好用:

>>> def my_range(stop):
    i = 0
    while i < stop:
        yield i
        i += 1

>>> [k for k in my_range(10) if k < 5]
[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

现在我修改我的发电机:

>>> def my_range():
    i = 0
    while True:
        yield i
        i += 1

>>> result = []
>>> for k in my_range():
    if k < 5:
        result.append(k)
    else:
        break


>>> print(result)
[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

现在,为什么这个陷入无限循环?即使我有k <5.生成器是否应该只在下一次被调用时迭代?

>>> [k for k in my_range() if k < 5]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension generator

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

这个基准似乎相关吗?

我试图对一些itertools针对生成器和列表推导的方法进行基准测试.我的想法是,我想通过过滤基本列表中的一些条目来构建迭代器.

这是我提出的代码(在接受的答案后编辑):

   from itertools import ifilter
import collections
import random
import os
from timeit import Timer
os.system('cls')

# define large arrays
listArrays = [xrange(100), xrange(1000), xrange(10000), xrange(100000)]

#Number of element to be filtered out
nb_elem = 100
# Number of times we run the test
nb_rep = 1000


def discard(it):
    collections.deque(it, maxlen=0)


def testGenerator(arr, sample):
    discard(x for x in sample if x in arr)


def testIterator(arr, sample):
    discard(ifilter(sample.__contains__, arr))


def testList(arr, sample):
    discard([x for x in sample if …
Run Code Online (Sandbox Code Playgroud)

python benchmarking iterator list-comprehension generator

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

java随机生成器无需重复

我试图使用随机生成器生成二维数组.基本上,每列应包含一个介于1-50之间的随机值,但不会重复,但问题是,我无法在同一行或程序中的任何其他行或列上获得重复值.换句话说,每个I整数应该只显示一次.我的对象是通过链表创建的,一旦我弄明白,我可能会将algorthim整合到那里,但是现在,继续我所做的.

int[] array = new int[50];



        for(int i=1;i<=9;i++)
        {

        int[] grades = new int[5];
            for(int j=0;j<=4;j++)
            {

            int unique = gen.nextInt(50)+1;


            grades[j] = unique; 
            }
            list.add(new Student(i, grades));

        }

        System.out.println(list);
Run Code Online (Sandbox Code Playgroud)

我的输出:

Student1: 20 49 45 16 13 
Student2: 28 10 11 30 6 
Student3: 13 25 37 31 49 
Student4: 8 23 8 12 32 
Student5: 22 18 35 2 7 
Student6: 35 8 16 23 36 
Student7: 35 3 15 42 2 
Student8: 43 12 44 2 35 
Student9: …
Run Code Online (Sandbox Code Playgroud)

java random linked-list generator

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

计算一次的函数,缓存结果,并从缓存无限返回(Python)

我有一个执行昂贵操作的功能,经常被调用; 但是,操作只需执行一次 - 其结果可以缓存.

我尝试制作一个无限的发电机,但我没有得到我预期的结果:

>>> def g():
...     result = "foo"
...     while True:
...         yield result
... 
>>> g()
<generator object g at 0x1093db230>    # why didn't it give me "foo"?
Run Code Online (Sandbox Code Playgroud)

为什么不是g发电机?

>>> g
<function g at 0x1093de488>
Run Code Online (Sandbox Code Playgroud)

编辑:如果这种方法不起作用,这很好,但我需要的东西与常规函数完全相同,如下所示:

>>> [g() for x in range(3)]
["foo", "foo", "foo"]
Run Code Online (Sandbox Code Playgroud)

python caching generator python-2.7

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

Python:迭代字典的子集

我想迭代一个字典的子集来找到子集中的最小值.我可以使用生成器表达式来获取值:

>>> S = {'a', 'c'}
>>> D = {'a': 2, 'b': 0, 'c': 1, 'd': 3}
>>> min(D[k] for k in S)
1
Run Code Online (Sandbox Code Playgroud)

要获得相关的密钥,我想这是可能的:

>>> subset_min = min(D[k] for k in S)
>>> [k for k, v in D.iteritems() if v == subset_min]
['c']
Run Code Online (Sandbox Code Playgroud)

但肯定有一种方法不需要再次搜索字典?我希望像这里min(D, key=D.get)讨论的那样,但在这种情况下我无法看到如何应用它.

python dictionary iterator generator

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

Javascript计算 - NaN消息

有人能够帮助我吗?当我在Javascript中尝试计算时,它们似乎总是失败并以NaN的形式返回

function SpinRand()
{

    var a,b,c,d,e,f;

    a=Math.floor(Math.random()*9);

    b=Math.floor(Math.random()*9);

    c=Math.floor(Math.random()*9);

    d=Math.floor(Math.random()*9);

    e=Math.floor(Math.random()*9);

    f=a+b+c+d+e+f;

    alert(f);

}
Run Code Online (Sandbox Code Playgroud)

javascript random math generator nan

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

随机字符串生成器C#

我做了一个简单的数字生成器,我有一个问题:生成器是否可以弹出"红色","蓝色","绿色","黄色"和"白色"而不是数字1-5?

namespace zufallsgenerator
{
    public partial class Form1 : Form
    {
        Random r = new Random();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnWhlie_Click(object sender, EventArgs e)
        {
            int summe = 0, z; 

            lblAnzeige.Text = " ";

           while (summe <= 0)
           {
                z = r.Next(1, 6);
                summe = summe + z;
           }
           lblAnzeige.Text += summe + "\n";               
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# string random generator

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