gpt4 book ai didi

python - 在Python中将子列表结构复制到另一个等长列表

转载 作者:太空狗 更新时间:2023-10-29 18:16:20 25 4
gpt4 key购买 nike

假设我有一个列表,

list1 = ['Dog', 'Cat', 'Monkey', 'Parakeet', 'Zebra']

还有一个,

list2 = [[True, True], [False], [True], [False]]

(您可以想象第二个列表是使用 itertools.groupby 对作为家养宠物的动物创建的。)

现在假设我想为第一个列表提供与第二个列表相同的子列表结构。

list3 = [['Dog', 'Cat'], ['Monkey'], ['Parakeet'], ['Zebra']]

我可能会这样做:

list3 = []
lengths = [len(x) for x in list2]
count = 0
for leng in lengths:
templist = []
for i in range(leng):
templist.append(list1[count])
count += 1
list3.append(templist)

我还没有完全调试,但我认为应该可以。我的问题是是否有更 pythonic 或更简单的方法来做到这一点?这似乎有点令人费解,我不得不想象有一种更优雅的方式来做到这一点(也许在 itertools 中,它永远给我留下深刻印象)。

最佳答案

您可以简单地使用 next 作为无导入解决方案:

list1 = ['Dog', 'Cat', 'Monkey', 'Parakeet', 'Zebra']
list_1 = iter(list1)
list2 = [[True, True], [False], [True], [False]]
new_list2 = [[next(list_1) for _ in i] for i in list2]

输出:

[['Dog', 'Cat'], ['Monkey'], ['Parakeet'], ['Zebra']]

但是,对于深度 n 层的输入,您可以使用递归:

list1 = ['Dog', 'Cat', 'Monkey', 'Parakeet', 'Zebra']
list_1 = iter(list1)
list2 = [[True, [True, False]], [False], [[True]]]
def place_data(current):
return [next(list_1) if isinstance(i, int) else place_data(i) for i in current]

print(place_data(list2))

输出:

[['Dog', ['Cat', 'Monkey']], ['Parakeet'], [['Zebra']]]

关于python - 在Python中将子列表结构复制到另一个等长列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811213/

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