【发布时间】:2012-01-15 16:09:51
【问题描述】:
在搜索了很长一段时间并尝试使用列表推导自己想出一个解决方案后,我觉得我完全不知道如何解决以下问题:
给定一个列表:
crazy_list = [a, b]
地点:
a = [['*'], ['*', '34', '*', '*', '*', '*', '*', '*', '*'], ['*', '*', '*', '102', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '170', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '238', '*'], ['*']]
b = [['*'], ['*', '*', '*', '102', '*', '*', '*', '*', '*'], ['*', '*', '*', '*', '*', '170', '*', '*', '*'], ['*', '*', '*', '*', '*', '*', '*', '238', '*'], ['*', '34', '*', '*', '*', '*', '*', '*', '*'], ['*']]
我如何优雅地获得一个新的列表列表:
answer = [['*'], ['*', '34', '*', '102', '*', '*', '*', '*', '*'], ['*', '*', '*', '102', '*', '170', '*', '*', '*'], ['*', '*', '*', '*', '*', '170', '*', '238', '*'], ['*', '34', '*', '*', '*', '*', '*', '238', '*'], ['*']]
我将如何概括这种合并来做同样的事情:
[a, b, c, etc...]
(c 及以后的元素和子元素的数量与 'a' 和 'b' 相同,但在不同位置可能具有不同的唯一值)
====================v 到目前为止我能做的一点点 v============= ========
我可以想出一个列表理解,它可以为单个列表做我想做的事情,例如:
c = ['*', '34', '*', '*', '*', '*', '*', '*', '*']
d = ['*', '*', '*', '102', '*', '*', '*', '*', '*']
通过做:
[c[item_indx] if item != '*' else d[item_indx] for item_indx, item in enumerate(c)]
但即使试图概括我到目前为止所拥有的东西也让我非常头疼...... 我可能错误地处理了这个问题。关于如何解决/更好地解决这个问题的一些帮助和/或想法将不胜感激。此外,我不能仅仅放弃'*',因为它们编码重要的时间信息。感谢你的宝贵时间!
【问题讨论】:
-
合并时同一位置发生冲突怎么办?
-
如果在合并后已经存在唯一值 aka(数字字符串),则在连续合并中出现在相同位置的任何其他数字不应覆盖。只有 '*' 应该被覆盖。
标签: python list merge multidimensional-array