【发布时间】:2013-12-24 20:22:56
【问题描述】:
我有一个平面列表 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']
我想将消息中的每 2 个字母对分配给 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 中取出两个元素,并在6 个元素之后将它们分配给final 的元素之一,然后我将返回K 并开始将它们分配给@987654326 上的“循环” @
环顾四周并与聊天中的一些人交谈后,我得到了
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']]
这很接近,但我只想附加字母而不是重复 MARK 的字母
【问题讨论】:
-
你需要什么循环?我用
while message: for lst in final: for _ in range(2): lst.append(message.pop(0))得到了正确的输出 -
我需要循环遍历键,所以我分配 2 个元素,然后转到 E,分配 2 个元素,然后 Y 分配 2 个元素,然后将 bakc 分配给 K 并重复
-
这些答案无法正常工作的原因是我最终制作了一个一维列表,因为它需要是每个字母的维度。错误的解决方法,尝试使用其中一种方法来为人们提供帮助!
标签: python list matrix list-comprehension