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

标签 python

如何将多个生成器表达式作为 Python 的 join 方法的输入?我尝试了以下不起作用的方法。使用 Python 2.x 和 3.x 时有区别吗?我的确切版本是 Python 2.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

最佳答案

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

', '.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())

附带说明一下,Python 3.6 引入了 Literal String Interpolation ,这意味着你应该能够做这样的事情(我会在家里测试这个,因为我没有 3.6 在工作;有人可以验证这是否真的有效。如果没有,请告诉我,我会删除它):

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

关于python - 如何将生成器表达式作为 Python 的 join 方法的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38730265/

相关文章:

python - 按子字符串条件过滤 pandas DataFrame

python - 如何在没有Django模型的情况下查询数据库?

python - Numpy:将 RGB 平面数组转换为矩阵

Python Pandas 从两行创建共同出现矩阵

python - 如何使用变量值来调用数据框?

python - 如何在类对象上调用 .lower?

python - 对派生类中的 self 以及与基类成员变量的关系感到困惑

python - OpenCV-Python : img is not a numpy array, 既不是标量

python - 使用 Python 从 sql server 数据库中检索数据

python - 我可以使用 nuitka 创建单个文件可执行文件吗?