将列表的一个元素放在另一个列表的所有元素之间

2024-09-25 00:33:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不同长度的列表

list_a = ['pineapple', 'banana', 'mango']
list_b = ['tropical']

我想把它们结合起来如下:

final_list = ['pineapple', 'tropical', 'banana', 'tropical', 'mango', 'tropical']

目标是最终得到一个数据帧,其中包括变量“fruits”和变量“origin”。我将通过创建一个只显示每秒钟一个元素的列表来实现这一点,然后再合并

我已经尝试过的:

fruit_origin = list_b[0]
desired_list = list(map(fruit_origin.__add__, list_a))

但这会像这样返回:

['pineappletropical', 'bananatropical', 'mangotropical']

提前谢谢


Tags: 数据元素map目标列表originlistfinal
3条回答

我不确定我是否正确理解了你的问题,但是如果你想映射原点,我假设它只是列表中的1个元素。您可以尝试以下方法:

desired_list = []
for fruit in list_a:
   desired_list.append(fruit)
   desired_list.append(list_b[0])


print(desired_list)

输出:

['pineapple', 'tropical', 'banana', 'tropical', 'mango', 'tropical']

您可以使用^{}^{}和嵌套的comprehensionla:

from itertools import cycle

list_a = ['pineapple', 'banana', 'mango']
list_b = ['tropical']

[x for tpl in zip(list_a, cycle(list_b)) for x in tpl]
# ['pineapple', 'tropical', 'banana', 'tropical', 'mango', 'tropical']

您还可以使用^{}来展平这些对,如@Matthias所建议的:

from itertools import cycle, chain

[*chain(*zip(list_a, cycle(list_b)))]  # Python >= 3.5
# or more verbose
list(chain.from_iterable(zip(list_a, cycle(list_b))))

组合itertools.cyclezipitertools.chain

cycle(['tropical']) 
=> 'tropical', 'tropical', 'tropical', 'tropical', ...

zip(['pineapple', 'banana', 'mango'], ['tropical', 'tropical', 'tropical'])
=> [('pineapple', 'tropical'), ('banana', 'tropical'), ('mango', 'tropical')]

list(chain(*[('pineapple', 'tropical'), ('banana', 'tropical'), ('mango', 'tropical')]))
=> ['pineapple', 'tropical', 'banana', 'tropical', 'mango', 'tropical']

最终代码

result = list(chain(*zip(list_a, cycle(list_b))))

相关问题 更多 >