【问题标题】:Python Challenge #2 - For loop problemPython Challenge #2 - For 循环问题
【发布时间】:2011-09-24 22:47:51
【问题描述】:

Python Challenge #2

Answer I found

FILE_PATH = 'l2-text'
f = open(FILE_PATH)
print ''.join([ t for t in f.read() if t.isalpha()])
f.close()

问题:为什么它们在 for 循环 t for t in f.read() 之前是一个“t”。 除了那一点,我理解其余的代码。 如果我尝试删除它,我会收到一个错误,那么它会做什么?

谢谢。

【问题讨论】:

  • 感谢您的快速回复和您的宝贵时间,非常感谢。
  • 欢迎来到 StackOverflow。当您决定哪个答案对您最有帮助时,通过单击答案左侧的复选框轮廓将其标记为已接受的答案。 FAQ.

标签: python for-loop


【解决方案1】:

这是list comprehension,而不是for-循环。

列表推导式提供了一种创建列表的简洁方式。

[t for t in f.read() if t.isalpha()]

这会在文件 (f) 中的所有 alpha 字符中创建一个 list。然后你们一起join()他们。

您现在有一个指向文档的链接,它应该可以帮助您理解理解。当你不知道它们叫什么时,搜索它们是很棘手的!

希望这会有所帮助。

【讨论】:

  • 感谢您的快速响应和帮助。
【解决方案2】:

[t for t in f.read() if t.isalpha()] 是一个列表理解。基本上,它采用给定的可迭代对象(f.read())并通过应用可选过滤器(if 子句)和映射函数(for 左侧的部分)读取所有元素来形成一个列表.

然而,这里的映射部分是微不足道的,这使得语法看起来有点多余:对于给定的每个元素 t,它只是将元素值 (t) 添加到输出列表中。但也可以使用更复杂的表达式,例如 t*2 for t ... 会重复所有有效字符。

【讨论】:

  • 感谢您的简化回答。
【解决方案3】:

注意以下也是有效的:

print ''.join(( t for t in f.read() if t.isalpha()))

你有 ( and ) 而不是 [ and ] 这指定了一个生成器而不是一个列表。 generator comprehension

【讨论】:

  • 创建生成器表达式不需要第二个括号:''.join(t for t in f) 完全有效
  • 啊,谢谢,从那以后我学到了很多关于 python 的知识
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
相关资源
最近更新 更多