gpt4 book ai didi

python - 在预定义的位置将一个列表中的值插入到另一个列表中

转载 作者:行者123 更新时间:2023-11-28 19:47:31 25 4
gpt4 key购买 nike

在 Python (3.5) 中,如果我有一个像这样的长列表:

long_list = ['0','1','0','1','0','0'.'0'.'1','1','0']

和一个长度等于 long_list 中 '1' 数量的较短列表,如下所示:

short_list = [8,7,6,5]

我将如何创建一个新列表,将我的 short_list 的值“插入”到我的 long_list 中每个有“1”的索引处,并且为了保持一致性,将 long_list 中的“0”“替换”为一些数字(比如 99)。

我可以用一个令人痛苦的 for 循环来做到这一点,但似乎应该有一种方法可以通过列表理解更有效地做到这一点,不是吗?

# bad solution
new_list = []
x = 0
for i in range(len(long_list)):
if long_list[i] == '0':
new_list.append(99)
else:
new_list.append(short_list[x])
x += 1

期望的输出:

new_list = [99,8,99,7,99,99,99,6,5,99]

最佳答案

short_list 转换为迭代器并使用列表理解从那里为每个 '1' 获取值,否则使用固定值:

>>> long_list = ['0','1','0','1','0','0','0','1','1','0']
>>> short_list = [8,7,6,5]
>>> it = iter(short_list)
>>> [next(it) if x == '1' else 99 for x in long_list]
[99, 8, 99, 7, 99, 99, 99, 6, 5, 99]

这显然仅在 short_list 具有与 long_list 上的 1 相同数量或更多元素时有效。以上具有 O(n) 时间复杂度,其中 nlong_list 中元素的数量。请注意,这对所有类型的可迭代对象都适用,long_listshort_list 可能是生成器,最终结果是相同的。

关于python - 在预定义的位置将一个列表中的值插入到另一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42139879/

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