2012-01-12 50 views

回答

0

对我来说,例子有所不同。列表解析可能不会自然而然地发生,直到你用它们来解决一个或两个for loop解决不了的问题。

的几点思考(其他人可能有更好的例子):

  • 给出的单词的列表中,找到长度为5
  • 鉴于号码列表的话,返回素数的子集,乘以2
  • 给定幸运饼干语录(或推文)的列表,返回一个长度不超过10个单词的说明列表,并在每个结尾添加“在床上”。
0

List内涵是相同的概念,思考一个for循环,除了他们是在同一行,你可以在线使用它们作为参数。

myFunc([s.strip() for s in mystrings]) 

发电机组补充不会立即在内存中创建列表。他们步的值,当你遍历他们,可以更有效率,如果你将提前停止遍历他们不需要将整个结果马上

2

这里就是我想通过列表解析。

1)我需要输出列表

2)我开始与列表/迭代。

3)我要么需要上的所有元素执行操作和/或选择从原来的名单的具体内容。

这使我下面的结构:

output = [ mangle(x) for x in selector(input)]

裂伤()是一些功能改变的元素。例如,我可能使用x.lower()来使元素小写。

我总是使用x作为迭代器。只是保持一致(并且我从不将它用作for循环中的迭代器)。

选择器()是输出TrueFalse的功能。通常这会是某种if语句。我主要使用这个存在的测试,特别是如果我是mangling输出。例如,x for x in input if input

列表解析可能非常好。我认为他们真的提高了可读性,而且不仅仅是一个巧妙的技巧。但请记住,它们只不过是一个for循环内联。

尝试编写循环并尝试将它们转换为列表理解可能是最容易的。

+0

不错,但关于'selector(input)'是函数的部分在我看来有点误导。 – wim 2012-01-12 05:17:11

+0

> 3)我需要对所有元素执行操作和/或从原始列表中选择特定元素。 'output = [mangle(x)for x in selector(input)]'< ->'output = [mangle(x)for x in selector(input)if check(x)]' – warvariuc 2012-01-12 06:11:28

1

如果你刚刚开始使用列表解析,这是我的头脑。首先写你的循环正常:

results = [] 

# get all keys that aren't test strings and add to results list 
for a in blah.keys(): 
    if a not in ('test', 'foo'): 
    results.append(a) 

我们创建一个列表理解,离开for循环,如果以相同的顺序发言,并把它们放在同一行,把“最终结果”的代码在开始:

results = [ results.append(a) for a in blah.keys() if a not in ('test', 'foo') ] 

我们快到了!我们并不需要手动添加(a)根据什么我们把表达的那部分将自动被添加到列表中,因此最终表达式为:

# get all keys that aren't test strings and add to results list 
results = [ a for a in blah.keys() if a not in ('test', 'foo') ] 

HTH!

+0

当我需要比较elemts两个甚至更多的单独列表。它变成了一种嵌套的理解。然后我被吹走了。需要花费很多时间来思考,测试闲置然后运行。有没有优雅的思维方式,所以它只是走了。我相信会有,我认为这使得它看起来很复杂...你的想法是什么,使用理解的想法。 – Ashish 2012-01-12 06:43:32

+0

你有没有例子? – fileoffset 2012-01-19 05:01:47