【问题标题】:Breaking out of a for loop inside of python string join() Method打破python字符串join()方法内部的for循环
【发布时间】:2016-08-20 08:38:48
【问题描述】:

我的代码是:

maxlimit = 5
mystring = ' \r\n '.join([('' if (idx >= maxlimit) else str(name))
                         for idx,name in enumerate(queryset)])

如果idx >= maxlimit,我怎样才能打破join()方法内部的for循环?

【问题讨论】:

  • 你可以只切片(或islice)列表:... for idx,name in list(enumerate(queryset))[:maxlimit]
  • @Rawing 只是为了挑剔 OP 需要[:maxlimit + 1]。整个if 也变得不必要了:' \r\n '.join(str(name) for name in queryset[:maxlimit + 1])

标签: python string for-loop join break


【解决方案1】:

好吧,你应该在列表推导中使用if 条件:

mystring = ' \r\n '.join([str(name) for idx, name in enumerate(queryset) 
                          if idx < maxlimit])

这只会生成一个包含 5 个项目的列表。

但是使用itertools.islice 来限制要迭代的项目数会更容易;或者如果查询集(我不知道它支持什么)支持切片,那么只需使用[:maxlimit] 切片即可:

from itertools import islice
' \r\n '.join([str(name) for name in islice(queryset, maxlimit)])

虽然对于每个元素简单地应用一个函数,我经常使用map,因为它需要更少的输入:

' \r\n '.join(map(str, islice(queryset, maxlimit)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    相关资源
    最近更新 更多