标签: generator

Haskell:从混合类型列表中设置生成

我正在尝试从一个类型生成一个新列表,该类型本质上是一个包含混合类型的列表.我不确定这方面的技术描述所以我提前道歉,但我想我可以通过使用示例和代码来解释.

例如,我有一个定义了以下类型的类型/列表:

type Database = [(Person, [Book]) ]
type Person = String
type Book = String

testBase :: Database
testBase 
= [("Alice",["TinTin", "Wizard of Oz"]), ("Rory", ["Learn Erlang", "Learn Haskell"]) ]
Run Code Online (Sandbox Code Playgroud)

在上面的数据库类型中,我有一个"模拟"库.第一个值(Person)是借款人的名字,第二个值(列表)包含该人借来的所有书籍.

基于这些信息,我希望能够拥有一个获取该人姓名的功能,并返回他们借来的书籍清单.例如,有一个"Alice"参数应该返回:

 ["TinTin", "Wizard of Oz"]
Run Code Online (Sandbox Code Playgroud)

我创建的函数看起来像这样,但返回一个空列表.我希望它返回一个包含书值的列表,即[Book].我该怎么做才能使这段代码有效?

borrowedBooks       :: Database -> Person -> [Book]
borrowedBooks dBase findPerson
=   [book | (person,[book])  <- dBase, person == findPerson ]
Run Code Online (Sandbox Code Playgroud)

haskell list generator set

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

需要返回字符串但只能获得带随机数生成器的int

无法弄清楚为什么我的代码只在我需要一个字符串时返回一个Int,并且帮助会很棒.代码如下.我尝试将变量声明为String而没有运气.

我想要返回3个随机字符串:樱桃,葡萄,铃铛或x

import java.util.Scanner;
import java.util.Random;

public class slot {
    public static void main(String[] args)
    {
        String answer = "y";
        int cherry;
        int grape;
        int bell;
        int x;



        Random generator = new Random(); // random generator
        Scanner scan = new Scanner (System.in); // scanner class

        System.out.println("Would you like to play the slot machine?(y/n): ");
        answer = scan.nextLine();

        while(answer.equalsIgnoreCase("y"))
        {
             cherry = generator.nextInt(5); // generates a random number
            grape = generator.nextInt(5);
            bell = generator.nextInt(5);

            System.out.println("The three numbers of the slot machine …
Run Code Online (Sandbox Code Playgroud)

java random generator

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

如何在两者之间合并两台发电机?

如何合并两个不同的生成器,在每次迭代中,不同的生成器将获得收益?

>>> gen = merge_generators_in_between("ABCD","12")
>>> for val in gen:
...     print val
A
1
B
2
C
D
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我没有找到它的功能itertools.

python generator python-itertools

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

Python 2.7:"有什么东西已经屈服了吗?"

在生成器函数中,如何确定它是否已经产生了什么?

def my_generator(stuff):
    # complex logic that interprets stuff and may or may not yield anything

    # I only want to yield this if nothing has been yielded yet.
    yield 'Nothing could be done with the input.'
Run Code Online (Sandbox Code Playgroud)

python yield generator

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

生成器表达式失败,最大递归深度

请考虑以下代码段(注意我使用的是全局,因为Python 2.7中没有非本地关键字)

def foo(L,K):
    global count
    count = 0
    def bar(f,L):
        global count
        for  e in L:
            if e - f == K or f - e == K: count += 1
            yield e
    try:
        while True:
            L = bar(L.next(),L)
    except StopIteration:
        return count
count=0
print foo((int(e) for e in some_string.split()),some_number)
Run Code Online (Sandbox Code Playgroud)

哪里

some_string: A space delimited integers
some_number: An integer
Run Code Online (Sandbox Code Playgroud)

何时len(some_string) = 4000,上述代码因错误而失败

RuntimeError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)

是因为内部嵌套的生成器被实现为递归吗?

python recursion generator python-2.x

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

在python中使用递归函数生成

我正在尝试为排列目的创建一个生成器.我知道在python中有其他方法可以做到这一点.但这是为了其他的东西.但我无法屈服于这些价值观.你可以帮忙吗?

def perm(s,p=0,ii=0):
    l=len(s)
    s=list(s)
    if(l==1):       
        print ''.join(s)
    elif((l-p)==2):
        yield ''.join(s)
        yield ''.join([''.join(s[:-2]),s[-1],s[-2]])
    else:
        for i in range(p,l):
            tmp=s[p]
            s[p]=s[i]
            s[i]=tmp        
            perm(s,p+1,ii)
Run Code Online (Sandbox Code Playgroud)

python recursion yield generator

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

将生成器嵌入发电机中是Pythonic吗?

我需要构建空的嵌套字典的大树,并想知道下面的代码是否是Pythonic:

dictionary_name = dict((year, dict((month, dict((day, []) for day in days))
                       for month in months)) for year in years)
Run Code Online (Sandbox Code Playgroud)
  • 如果这是不好的做法,那么编写上述代码的Pythonic方法是什么?
  • 如果这不是一个不好的做法,我应该在哪里使用换行符来保持这个清晰和"Pythonic".此外,嵌套它们时发电机的速度优势是否仍然存在?

注意:此问题也适用于列表推导.如果您认为我应该将此问题分解为多个问题,请告诉我.

python optimization list-comprehension generator

1
推荐指数
2
解决办法
138
查看次数

懒惰的方法来检查所有生成的元素是否相等

给定一个产生可比值的迭代器,检查所有结果是否相等的懒惰方法是什么.也就是说,尽快失败,而不消耗整个发电机.所以len(set(g))==1不行.

我正在寻找一个简单的表达式/库函数组合.没有def.

python generator

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

在python生成器理解中使用状态?

有没有办法将这个生成器函数转换成一个相对简单的生成器理解?(以下对我有用,我只是想了解可能的选项)

def annotate(x):
   n = 0
   for item in x:
     yield(item,n)
     n = n + 1
Run Code Online (Sandbox Code Playgroud)

使用示例:

>>> for line in annotate([3,4,5]):
...   print line
...
(3, 0)
(4, 1)
(5, 2)
Run Code Online (Sandbox Code Playgroud)

python generator

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

Python修改生成器

我实现了一个(简单的)python生成器.现在,我想制作另一个(从中),它将迭代所有值,但最后一个.

def gen(x):                   # Generate the interval [x, 10]
    if x <= 10:
        yield x
        for v in gen(x + 1):
            yield v
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?是否可以使用装饰器改变原始发生器?

python generator

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