Python 单行有两个输出的嵌套循环

Python nested loop with two outputs in a single-line

是否可以创建一个 python 嵌套循环,每个循环周期 return 有两个数组条目?

例如,我可以从这个嵌套循环中得到这个输出:

>>> [x for x in [1,2,3,4,5,6]]
[1, 2, 3, 4, 5, 6]

我如何创建一个单行嵌套循环,使我 return 类似于(for 循环数组应保持 [1,2,3,4,5,6]):

[99, 1, 99, 2, 99, 3, 99, 4, 99, 5, 99, 6]

对于循环内的每个循环,我也会在其中注入一个额外的值。这可能吗,或者我唯一的解决方案是将这个嵌套循环扩展为带有两个附加项的普通循环?

我想避免这样:

myArray = []
for x in [1,2,3,4,5,6]:
    myArray.append(99)
    myArray.append(x)

这是可能的,但将其展开为 3 行可能更具可读性,因此是比列表理解更好的选择:

你必须使用:

  • 重复生成要交错的常量值的一种方法。 - 这可以通过 itertools.repeat;
  • 来完成
  • 每次迭代将两个值打包在一起:内置函数 zip 会这样做;
  • 迭代打包值:一个来自您的正常来源,一个注入:您需要另一个 for 语句。我觉得有点违反直觉的是,在理解中,嵌套循环只是像普通代码一样嵌套,但在这种情况下使用循环值 (v) 的表达式位于最外层,作为前缀:
from itertools import repeat

result = [v for bundle in zip(repeat(99), [1,2,3,4,5]) for v in bundle]

如果您愿意在单独的行中定义列表,那么您可以循环范围 2*len(last) 和 select 列表中的任何一项(当您的迭代计数器为奇数时)或数字 99(偶数时)。

lst = [1,2,3,4,5,6]
[lst[x//2] if x%2 else 99 for x in range(2*len(lst))]

给出

[99, 1, 99, 2, 99, 3, 99, 4, 99, 5, 99, 6]