Python:理解 append 和扩展之间的区别

标签 python list append extend

下面的代码不会在当前状态下运行。但是,如果我将 sum_vec.extend( vec1[i] + vec2[i] ) 更改为 sum_vec.append( vec1[i] + vec2[i] ) 它会起作用正好。我理解追加和扩展之间的基本区别,但我不明白为什么如果我使用扩展代码就不起作用。

def addVectors(v1, v2):

    vec1 = list(v1)
    vec2 = list(v2)
    sum_vec = []
    vec1_len = len(vec1)
    vec2_len = len(vec2)
    min_len = min( vec1_len, vec2_len )

    # adding up elements pointwise
    if vec1_len == 0 and vec2_len == 0:
        return sum_vec
    else:
        for i in xrange(0, min_len):
            sum_vec.extend( vec1[i] + vec2[i] )

    # in case one vector is longer than the other
    if vec1_len != vec2_len:
        if vec1_len > vec2_len:
            sum_vec.extend( vec1[min_len : vec1_len] )
        else:
            sum_vec.extend( vec2[min_len : vec2_len] ) 
    print sum_vec
    return sum_vec

v1 = [1,3,5]
v2 = [2,4,6,8,10]
addVectors(v1,v2)

最佳答案

正如其他人所指出的,extend 接受一个可迭代对象(例如列表、元组或字符串),并将可迭代对象的每个元素一次一个地添加到列表中,而 append 将其参数作为单个项目添加到列表的末尾。需要注意的关键是 extend 是多次调用 append 的更高效版本。

a = [1,2]
b = [1,2]

a.extend([3, 4])
for x in [3, 4]:
    b.append(x)

assert a == b

append 可以将可迭代对象作为其参数,但它将其视为单个对象:

a = [1,2]
a.append([3,4])
assert a == [1, 2, [3, 4]]  # not [1, 2, 3, 4]

关于Python:理解 append 和扩展之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29513126/

相关文章:

python - NumPy 数组写时复制

r - 从列表元素的成对组合构建数据框

linux - 在 Perl 脚本中使用 Linux 通配符

javascript - 按循环内的条件更改 append 的 td

Python - 根据总和对列表进行排序

Linux 追加到文件中的单行

python - 无法使用 Redis 对象映射器 (ROM) 进行查询

python - 如何更改 odoo 9 中 float 字段的文本对齐方式

python - 未绑定(bind)本地错误: local variable 'y' referenced before assignment in Pandas

python - 列表中成对的字典列表