Python将数组附加到另一个数组

62

我目前正在进行DES加密算法的实现。在代码的某个部分,我需要将一个数组附加到另一个数组中。以下是我的代码:

C0=[1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1]

def Fiestel():
    C=[]
    C.append(C0)
    temp=[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]
    C.append(temp)
    print(C)
Fiestel()

我该如何将一个数组添加到已有的数组中?我甚至尝试将C声明为2D数组。提前感谢您的帮助。
每个元素本身都是一个数组。

enter image description here


4
检查extend方法。 - Francisco
1
我希望下一个元素是一个数组。我尝试了,但仍然没有正确的答案。 - shubhamj
1
你的代码创建了一个包含两个列表的列表C。问题出在哪里? - TigerhawkT3
很抱歉我没有能够恰当地解释清楚。我刚刚上传了一张图片来说明我想要的输出结果。不过我已经设法得到了这个输出结果。 - shubhamj
能否请点赞的人解释一下这个问题实际在问什么?对我来说,它看起来像是“我正在尝试A以获得X,但我却得到了X。我该如何获得X?”而答案要么是“做A以获得X”,要么是“做B以获得Y”。 - TigerhawkT3
显示剩余2条评论
4个回答

120

你可以使用 "+=" 运算符将一个列表的元素附加到另一个列表中。请注意,"+" 运算符会创建一个新的列表。

a = [1, 2, 3]
b = [10, 20]

a = a + b # Create a new list a+b and assign back to a.
print a
# [1, 2, 3, 10, 20]


# Equivalently:
a = [1, 2, 3]
b = [10, 20]

a += b
print a
# [1, 2, 3, 10, 20]

如果你想将列表附加在一起并保持它们的列表形式,则可以尝试:

result = []
result.append(a)
result.append(b)
print result
# [[1, 2, 3], [10, 20]]

1
我想要一个新的数组,而不是原来的这个,新的数组应该是[[1,2,3],[10,20]]。 - shubhamj
1
@shubhamj:添加了更多的代码。你应该指定你想要的输出是什么。 - stackoverflowuser2010
4
问题已经编辑了六次。您现在看到的不是最初写的内容。 - stackoverflowuser2010
他们最初编写的代码已经完全符合他们的要求(假设缩进正确):创建一个列表并将另外两个列表附加到其中。你告诉他们做他们已经在做的事情。这个答案的目的是什么?你甚至在顶部留下了错误的建议。我不知道为什么这个回答会被点赞。 - TigerhawkT3
据我理解,这个答案是错误的。它要求在数组上附加一个数组,但使用+的解决方案是针对列表的。如果讨论的是数组,则我认为指的是numpy.array,否则您可以简单地要求列表或列表中的列表。如果您在numpy.arrays上使用+,它将返回两个数组的总和(每个数组4个元素,总共8个元素)在一个新数组中(总共4个元素)。如果我使用append(),它会说不可能。 - Veritas_in_Numeris
显示剩余3条评论

49

除了 + 运算符外,还有另一种方法可以做相同的事情,即使用 extend()。

a = [1, 2, 3]
b = [10, 20]

a.append(b) # Output: [1, 2, 3, [10, 20]]
a.extend(b) # Output: [1, 2, 3, 10, 20]

您可以根据自己的需求使用这两个函数来操作列表。


1
一种方法是解包两个列表:
a = [1, 2, 3]
b = [10, 20]

[*a,*b] 

#output 
[1, 2, 3, 10, 20]

如果你想使用numpy,那么:
import numpy as np
a=np.array(a)
b=np.array(b)
list(np.append(a,b))

#output
[1, 2, 3, 10, 20]

-1
C0=[1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1]

def Fiestel():
    C=C.append(C0)
    temp=[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]
    C0=C0.append(temp)
    return C

C0=Fiestel()
print (C0)

试试这个,我认为这就是你要找的。


C=C.append(temp) 会让 C == None,因为 C.append() 是 in-place 的。 - Blender
我在Python 2.7.6中尝试了这个,它完美地运行。 - Issac Saji
请尝试一下。这段代码对我来说完美无缺。我可以在最终输出中得到第一个列表和第二个列表作为单个元素。 - Issac Saji
C 将会是 None。如果您对代码的工作方式不熟悉,请进行测试。 - TigerhawkT3
请将代码复制粘贴到一个文件中,并在终端中运行。你将会得到输出结果。 - Issac Saji
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接