我有一个平面列表message
并且我有一个矩阵,其中每一行只包含一个元素
final = [['K'], ['E'], ['Y']]
message = ['F', 'F', 'F', 'C', 'F', 'D', 'C', 'C', 'F', 'D', 'C', 'C',
'B', 'F', 'F', 'F', 'B', 'B', 'C', 'C', 'F', 'F', 'A', 'A']
我想将每两个字母对从消息分配到一个final字母,但我想一次在消息上写两个字母,然后循环final。
所以我想买些
final = [[K, F, F, C, C, B, F, C, C],
[E, F, C, F, D, F, F, F, F],
[Y, F, D, C, C, B, B, A, A]]
注意循环效果,我需要从
message
中获取两个元素,并将它们分配给final
中的一个元素,在6个元素之后,我将返回K并开始在final
上分配它们“循环”在和一些人聊天时,我显得很傲慢
code = [[i] + list(y) for i, y in zip_longest(key, zip(*[iter(mes)] * 2),fillvalue='-')]
然而,我得到了错误的结果,我不想用
-
填充缺失的值,而是想在原始的最终矩阵上循环。我得到:
[['M', 'F', 'F'], ['A', 'F', 'C'], ['R', 'F', 'D'], ['K', 'C', 'C'], ['-', 'F', 'D'], ['-', 'C', 'C'], ['-', 'B', 'F'], ['-', 'F', 'F'], ['-', 'B', 'B'], ['-', 'C', 'C'], ['-', 'F', 'F']]
使用周期:
[[i] + list(y) for i, y in zip(cycle(key), zip(*[iter(mes)] * 2))]
结果:
[['M', 'F', 'F'], ['A', 'C', 'C'], ['R', 'B', 'C'], ['K', 'D', 'E'], ['M', 'B', 'C'], ['A', 'D', 'E'], ['R', 'C', 'A'], ['K', 'E', 'D'], ['M', 'D', 'E'], ['A', 'F', 'F'], ['R', 'D', 'C'], ['K', 'F', 'F'], ['M', 'E', 'B'], ['A', 'D', 'E'], ['R', 'F', 'F']]
很接近,但我只是想把字母加上去,而不是重复马克的字母
最佳答案
我想你是想把这件事复杂化。尝试,简单地说:
final = [['K'], ['E'], ['Y']]
message = ['F', 'F', 'F', ...]
while message:
for lst in final:
for _ in range(2):
lst.append(message.pop(0))
这就是你要找的结果。
如果你真的必须使用列表理解法,你可以选择如下方法:
final = [final[index] + reduce(lambda x, y: x + y,
list(message[i:i+2] for i in
range(index,
len(message),
2 * len(final))))
for index in range(len(final))]
但这真的更让人无法理解。
关于python - 从平面列表中为矩阵的每个成员分配N个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20766393/