python - 将两个列表中的单个项目添加到新列表中

编写一个函数,它需要两个整数列表 a 和 b 作为参数并返回一个列表。该函数应按索引合并两个输入列表的元素,并将它们作为新列表中的元组返回。如果一个列表比另一个短,则应根据需要经常重复较短列表的最后一个元素。如果一个或两个列表为空,则应返回空列表。

请考虑以下示例:

merge([0, 1, 2], [5, 6, 7]) # should return [(0, 5), (1, 6), (2, 7)]
merge([2, 1, 0], [5, 6])    # should return [(2, 5), (1, 6), (0, 6)]
merge([], [2, 3])           # should return []

您可以假设参数始终是有效列表,并且您不需要提供任何类型的输入验证。

我的尝试:

def merge(a, b):
    if len(a) == 0 or len(b) == 0:
        mergelist = []
    elif len(a) > len(b):
        for i in range(0, len(b)):
            mergelist = [a[i], b[i]]
        for i in range(len(b), len(a)):
            mergelist = [a[i], b[len(b)]]
    elif len(b) > len(a):
        for i in range(0, len(a)):
            mergelist = [a[i], b[i]]
        for i in range(len(a), len(b)):
            mergelist = [a[len(a)], b[i]]

    return mergelist

print(merge([0, 1, 2], [5, 6]))

有人能告诉我为什么我的代码是错误的吗?我的 IDE 说

the list index is out of range

但我检查了一遍又一遍,我认为它不是,,,。

编辑:我没想到会有这么多人帮助我并给我他们的代码版本。他们非常乐于助人。非常感谢大家!!!

最佳答案

您的代码中有几处需要更新:

(1) 将此格式 mergelist = [a[i], b[i]] 更改为此格式 mergelist.append((a[i], b[i]) )

(2) 需要处理 len(a) == len(b) 的情况

(3) 列表索引超出范围,因为列表索引从零开始。例如,如果 len(a) 为 2,则范围内允许的索引将仅为 0 和 1。所以 2 超出了范围。

试试这段代码:

def merge(a, b):
    mergelist = []
    if len(a) == 0 or len(b) == 0:
        return mergelist
    elif len(a) >= len(b):    #takes care of len(a)==len(b)
        for i in range(0, len(b)):
            mergelist.append((a[i], b[i]))
        for i in range(len(b), len(a)):
            mergelist.append((a[i], b[len(b)-1]))    #index minus 1
    elif len(b) > len(a):
        for i in range(0, len(a)):
            mergelist.append((a[i], b[i]))
        for i in range(len(a), len(b)):
            mergelist.append((a[len(a)-1], b[i]))    #index minus 1
    return mergelist

print(merge([0, 1, 2], [5, 6]))
print(merge([5, 6], [0, 1, 2]))
print(merge([0, 1, 2], [5, 6, 7])) # should return [(0, 5), (1, 6), (2, 7)]
print(merge([2, 1, 0], [5, 6]))    # should return [(2, 5), (1, 6), (0, 6)]
print(merge([], [2, 3]))           # should return []

输出:

[(0, 5), (1, 6), (2, 6)]
[(5, 0), (6, 1), (6, 2)]
[(0, 5), (1, 6), (2, 7)]
[(2, 5), (1, 6), (0, 6)]
[]

https://stackoverflow.com/questions/74161800/

相关文章:

ajax - Ajax 会降低性能吗?

macos - macOS Ventura 中的终端重复

visual-studio - 如何显示 Win32 MessageBox?

c++ - 在 C++ 中运行时获取变体中包含的类型?

php - OOP方式的蛋鸡问题

git - 错误 : unsupported value for gpg. 格式:ssh

haskell - xor = (/=) 是什么意思?

vba - 如何在 VBA 中处理对象声明(错误 91)

php - 如何在 Perl 中进行全局正则表达式匹配?

list - Haskell:用关联列表中的给定键替换元素