gpt4 book ai didi

python - 合并列表列表,使唯一值覆盖非唯一值?

转载 作者:行者123 更新时间:2023-11-28 19:58:32 24 4
gpt4 key购买 nike

在搜索了很长一段时间并尝试通过列表推导自行提出解决方案之后,我觉得自己完全不知道如何解决以下问题:

给定一个列表:

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)]

但即使试图概括我目前所拥有的东西也让我非常头疼......我可能错误地解决了这个问题。非常感谢有关如何解决/更好地解决此问题的一些帮助和/或想法。此外,我不能只是放弃 '*',因为它们编码了重要的时间信息。感谢你的宝贵时间!

最佳答案

假设到目前为止,您只在两个列表上取得了进展,您可以试试这个。

def merge(a, b):
return [a[item_indx] if item != '*' else b[item_indx] for item_indx, item in enumerate(a)]

reduce(merge, crazy_list)

在这种情况下,reduce 所做的是获取上次合并的结果列表,然后对下一个元素执行此操作。所以对于 [a, b, c, d] 的疯狂列表,a 和 b 将合并,结果列表将与 c 合并,结果将与 d 合并。等等。通常,reduce 以可比较的方式应用作为参数提供的函数。

编辑: 好的,我现在明白你说的了。所以我定义了另一种方法来处理列表的列表。我知道你已经接受了一个答案,但我将把它留作替代。

# a and b are lists of lists.
def merge_lists(a, b):
for i, v in enumerate(a):
a[i] = merge(a[i], b[i])
return a

reduce(merge_lists, (c, d))

关于python - 合并列表列表,使唯一值覆盖非唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com