我有一个平面列表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/

10-12 22:33