【问题标题】:How to adapt Python loop generation to be conditional?如何使 Python 循环生成成为有条件的?
【发布时间】:2013-02-12 04:15:07
【问题描述】:

我有一些这样的 Python 代码:

print seq(y), '\t', ', '.join(['%s-%s'%i for i in holetbl[y]])

但我想让内部字符串生成是有条件的。循环中的i 是两个值的元组,它们被放入字符串中的两个%s 值中。在元组值相同的情况下,我只喜欢一个值,如下所示:

print seq(y), '\t', ', '.join(['%s'%i for i, j in holetbl[y]])

如何设置条件来测试i == j 是否为i 值,否则,ij 值都与上述原始值一样?

【问题讨论】:

  • 您控制holetbl 元组的创建吗?如果是这样,您可以选择在生成过程中更轻松或更有效地清理数据,而不是在输出后进行清理。

标签: python string loops tuples conditional-statements


【解决方案1】:

您可以使用conditional expression

print seq(y), '\t', ', '.join('%s' % i if i == j else '%s-%s' % (i, j)
                              for i in holetbl[y])

注意

您无需制定要传递给str.join 的列表。一个简单的生成器表达式就可以了。这将更加内存友好并且相对更快

【讨论】:

  • 你能用一个例子详细说明“简单的生成器表达式”吗?
  • @WilliamKF:发布的示例使用生成器而不是 LC。
  • 我错过了您发布的内容与我最初发布的内容有何不同(除了添加条件表达式),以便通过使用简单的生成器表达式来提高效率。
  • @WilliamKF:在表达式周围添加括号 [] 使其成为列表理解,例如 ['%s' % i if i == j else '%s-%s' % (i, j) for i in holetbl[y]],这将强制 Python 在提供给 str.join 之前生成列表。
  • 这很微妙,我错过了比较两者的差异!
【解决方案2】:

怎么样

'%s-%s'%(i,j) if i != j else '%s'%i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-21
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多