我已经使用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)
将上面的代码用于列表理解。
答案 0 :(得分: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]]
答案 1 :(得分:0)
无需创建其他变量即可完成,例如k
和const
lst2 = [[i for i in range(j, j + 4)] for j in range(2, 6)]
答案 2 :(得分:0)
您可以将运算符itemgetter
与slice
一起使用,以从列表中获取子列表的切片,并使用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]]