如何将生成器表达式作为Python的join方法的输入?

2024-10-01 17:22:05 发布

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

如何将几个生成器表达式作为Python的join方法的输入?我试了以下不起作用的方法。使用Python2.x和3.x有区别吗?我的确切版本是python2.7.12。你知道吗

def productList(self, obj):
    return ", ".join([w.name for w in obj.someProducts.all()],[w.code 
                      for  w in obj.someProducts.all()])

没有[]

    def productList(self, obj):
        return ", ".join(w.name for w in obj.someProducts.all(),w.code 
                         for  w in obj.someProducts.all())

输入:

Product table
    Name:  Char;
    Code:  Char;

输出:

name1code1, name2code2

Tags: 方法nameinselfobjforreturn表达式
2条回答

如果要显示名称和代码,只需将它们组合起来,不需要两个生成器。你知道吗

', '.join(w.name + ':' + w.code for w in obj.someProducts.all())

或字符串格式:

', '.join('{name}: {code}'.format(name=w.name, code=w.code) for w in obj.someProducts.all())

或者另一个连接(不推荐,除非您可以给它一个生成器-创建另一个列表是一种浪费,但这演示了如何嵌套连接)

', '.join(':'.join([w.name, w.code]) for w in obj.someProducts.all())

另一方面,python3.6引入了Literal String Interpolation,这意味着您应该能够执行类似的操作(我将在家中进行测试,因为我的工作环境中没有3.6;是否有人可以验证这一点)。如果没有,请告诉我,我会删除它):

', '.join(f'{w.name}: {w.code}' for w in obj.someProducts.all())

试一试:

', '.join('{}{}'.format(w.name, w.code) for w in obj.someProducts.all())

我只是把w.name和w.code做成一个字符串,这样你就不需要两个列表了。如您所愿更改格式。你知道吗

相关问题 更多 >

    热门问题