我正在尝试从一个类型生成一个新列表,该类型本质上是一个包含混合类型的列表.我不确定这方面的技术描述所以我提前道歉,但我想我可以通过使用示例和代码来解释.
例如,我有一个定义了以下类型的类型/列表:
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) 无法弄清楚为什么我的代码只在我需要一个字符串时返回一个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) 如何合并两个不同的生成器,在每次迭代中,不同的生成器将获得收益?
>>> 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.
在生成器函数中,如何确定它是否已经产生了什么?
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 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中有其他方法可以做到这一点.但这是为了其他的东西.但我无法屈服于这些价值观.你可以帮忙吗?
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) 我需要构建空的嵌套字典的大树,并想知道下面的代码是否是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)
注意:此问题也适用于列表推导.如果您认为我应该将此问题分解为多个问题,请告诉我.
给定一个产生可比值的迭代器,检查所有结果是否相等的懒惰方法是什么.也就是说,尽快失败,而不消耗整个发电机.所以len(set(g))==1不行.
我正在寻找一个简单的表达式/库函数组合.没有def.
有没有办法将这个生成器函数转换成一个相对简单的生成器理解?(以下对我有用,我只是想了解可能的选项)
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生成器.现在,我想制作另一个(从中),它将迭代所有值,但最后一个.
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)
实现这一目标的最佳方法是什么?是否可以使用装饰器改变原始发生器?