-1

我已经使用 for 循环编写了代码,我希望将代码放入列表理解中。

mainLst = [[2],[3],[4],[5],[6],[7],[8]]
lst2 = [[],[],[],[]]
const = 0
for i in range(4):
    k = const
    for j in range(4):
        lst2[const].append(mainLst[k][0])
        k += 1
    const += 1
print(lst2)

期待上面的代码进入列表理解。

4

3 回答 3

1

如果您只想转换一个循环部分并仍然使用mainLst变量,那么它将如下所示:

mainLst = [[2],[3],[4],[5],[6],[7],[8]]
lst2 = [[mainLst[j + k][0] for k in range(4)] for j in range(4)]
print(lst2)

# or if you still want to have initialized lst2 array, then:

lst2 = [[],[],[],[]]
[lst2[j].extend([mainLst[j + k][0] for k in range(4)]) for j in range(4)]
print(lst2)

两者输出相同:

[[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
于 2019-04-14T08:11:08.010 回答
0

您可以使用运算符itemgetterwithslice从列表中获取子列表切片chain.from_iterable并将子列表合并到一个列表中:

from operator import itemgetter
from itertools import chain

mainLst = [[2],[3],[4],[5],[6],[7],[8]]

[list(chain.from_iterable(itemgetter(slice(i, i + 4))(mainLst))) for i in range(4)]
# [[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
于 2019-04-14T08:32:54.410 回答
0

可以在不创建其他变量的情况下k完成const

lst2 = [[i for i in range(j, j + 4)] for j in range(2, 6)]
于 2019-04-14T07:58:31.087 回答