Py学习  »  Python

如何在Python中正确地向数组添加元素

Omar • 5 年前 • 1653 次点击  

我有两个数组,如下面的代码所示(A和B)。我想作为输出 C = [[1, 2, 3, 11], [4, 5, 6, 12], [7, 8, 9, 13]]

我在努力,但我唯一能达到的是:

A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
B = [11, 12, 13]
C = [[x, y] for x, y in zip(A, B)]

print(C)
# Output: [[[1, 2, 3], 11], [[4, 5, 6], 12], [[7, 8, 9], 13]]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54720
 
1653 次点击  
文章 [ 4 ]  |  最新文章 5 年前
Luapulu
Reply   •   1 楼
Luapulu    5 年前

你在A和B中没有相同的筑巢水平,这就是为什么你得到了一个奇怪的答案。A是一个列表,而B只是一个列表。

如果要添加就位:

A.append(B)
# Output: A = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

否则:

C = A + [B]

时间安排

结论:对于这个问题,你用哪种方法做并不重要,因为每个案例的时间都差不多。不过,有些方法更具可读性。

计时代码:

import timeit

A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
B = [10, 11, 12]


def append_arrs(arrs=(A, B)):
    a, b = arrs
    a.append(b)
    return a


def plus_arrs(arrs=(A, B)):
    return arrs[0] + [arrs[1]]


def loopadd_arrs(arrs=(A, B)):
    return [x + [y] for x, y in zip(*arrs)]


def listadd_arrs(arrs=(A, B)):
    a, b = arrs
    return list((*a, b))


func_list = ["append_arrs", "plus_arrs", "loopadd_arrs", "listadd_arrs"]


for func in func_list:
    t = timeit.timeit(stmt=f'{func}', setup=f'from __main__ import {func}')
    print(f"Time for {func}: {t}")
Guilhem L.
Reply   •   2 楼
Guilhem L.    5 年前

import numpy as np
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
B = np.array([[11, 12, 13]]).T
C = np.append(A,B,axis=1)

可能你得根据你想要的形状来转置C。

Heap Overflow
Reply   •   3 楼
Heap Overflow    5 年前

如果不需要新的列表和修改 A 足够:

for a, b in zip(A, B):
    a.append(b)

它更有效,至少对于更长的内部列表。

Sayse
Reply   •   4 楼
Sayse    5 年前

你只需要做一个单一元素的数组( y

 [x + [y] for x, y in zip(A, B)]