返回python中for循环的值

2024-05-23 23:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出在for循环语法中把参数从一个列表或dict传递到另一个列表或dict的语法。

我想要的结果是:

 for bean in beans:
  if bean.type == 'coffee':
   print bean

只是,我不想打印到stdout,而是要收集字符串数据并将其附加到另一个列表中。最终把名单压平。

踢球者,我想在一条线上表演。

我知道“”join()方法,我正在查找此结果,以便可以从for in循环中筛选结果。


Tags: 数据字符串in列表for参数iftype
3条回答

一行代码使用列表或生成器理解,见布莱尔的答案。

对当前代码的改编将适合于yield关键字,该关键字允许您构造如下生成器函数:

def coffee_filter(beans):
    for bean in beans:
       if bean.type == 'coffee':
           yield bean

for bean in coffee_filter(beans):
    print "coffee from %s" % bean.country

由于python允许您在几乎任何地方定义函数,因此这非常有用。

[bean for bean in beans if bean.type == 'coffee']

List comprehensions很整洁。即使更整洁,通常也不需要生成一个完整的列表—只需要一个迭代器,该迭代器为您提供列表将包含的值。这是一个生成器,可以通过生成器表达式简洁地表达它们。它们的编写方式与列表理解相同,只是方括号变为paren(如果它是函数调用中的唯一参数,则可以省略它们),例如'\n'.join(str(bean) for bean in beans if bean.type == 'coffee')。优点是提到的懒惰,也就是说,在真正需要(请求)价值观之前,你永远不会产生价值观,也不会同时将所有价值观都保存在内存中(当然,除非消费者这样做)。

您可以使用itertools.chain将多个iterable(包括列表)链接到一个iterable,或者如果您无法更改正在获取列表列表的事实,则可以使用(x for list in lists for x in list)。对于涉及简单深度嵌套的广义解决方案,需要使用递归的完整函数。

'\n'.join([str(bean) for bean in beans if bean.type == 'coffee'])

相关问题 更多 >