Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中合并列表_Python_Merge - Fatal编程技术网

如何在python中合并列表

如何在python中合并列表,python,merge,Python,Merge,我已经读过了,但是没有解决办法 我有一张50张这样的名单: dataTest=[List1,List2,List3,...,List50] List1=[Images,Labels] dataTest=[Images of List1,2,3,...,50 , Labels of List1,2,3,...,50] 这些列表中的每一个都是带有标签的图像列表。我的意思是List1的第一个维度由一些图像组成,而List1的第二个维度是它们对应的标签。像这样: dataTest=[List1,

我已经读过了,但是没有解决办法

我有一张50张这样的名单:

dataTest=[List1,List2,List3,...,List50]
List1=[Images,Labels]
dataTest=[Images of List1,2,3,...,50  , Labels of List1,2,3,...,50]
这些列表中的每一个都是带有标签的图像列表。我的意思是List1的第一个维度由一些图像组成,而List1的第二个维度是它们对应的标签。像这样:

dataTest=[List1,List2,List3,...,List50]
List1=[Images,Labels]
dataTest=[Images of List1,2,3,...,50  , Labels of List1,2,3,...,50]
例如,List1是一个包含700个标签为0的图像的列表。 列表2是一个包含1000个图像的列表,标签为1。。。 因此,我们有一个50个列表,其中每个列表的大小为2

我想将所有列表合并在一起,以得到以下矩阵。我指的是这样的数组:

dataTest=[List1,List2,List3,...,List50]
List1=[Images,Labels]
dataTest=[Images of List1,2,3,...,50  , Labels of List1,2,3,...,50]
因此,我们将有一个两个大小的列表。第一个维度是所有列表中的所有图像,第二个维度是所有图像的标签,这就是您想要的:

a=[[1,2],[2,3]]
[v for d in a for v in d]
[1, 2, 2, 3]
在OP编辑后更改:

a=[[2,3],[2,3]]
c=[]
c.append([v[0] for v in a])
c.append([v[1] for v in a])
print c
[[2, 2], [3, 3]]

您只需要根据事物的外观将列表展平,您可以使用itertools来实现这一点

from itertools import*
dataTest=[['a',1],['a',2],['a',3]]
print [k for k in chain.from_iterable(k[0] for k in dataTest)]
输出

['a', 'a', 'a']

如果您正试图将列表展平,则可以将列表相加

dataTest=sum(dataTest,[])

如果我没有弄错的话,那么数据“List1=[Images,Labels]”的结构是:Images是一个图像列表,Labels是一个标签列表?如果这是真的,下面的代码将它们合并并生成一个结果列表,其中包含所有图像的列表(或者更好的是元组,但它当然可以转换)和所有标签的列表:

    # generate sample data
    l1 = [['IMG_1', 'IMG_2', 'IMG_3', 'IMG_4'],['IMG_LABEL_1', 'IMG_LABEL_2', 'IMG_LABEL_3', 'IMG_LABEL_4']]
    l2 = [['IMG_11', 'IMG_12', 'IMG_13', 'IMG_14'],['IMG_LABEL_11', 'IMG_LABEL_12', 'IMG_LABEL_13', 'IMG_LABEL_14']]
    l3 = [['IMG_21', 'IMG_22', 'IMG_23', 'IMG_24'],['IMG_LABEL_21', 'IMG_LABEL_22', 'IMG_LABEL_23', 'IMG_LABEL_24']]
    data = [l1, l2, l3]

    merged_list = []

    # merge the lists
    for source_list in data:
        merged_list += zip(source_list[0], source_list[1])

    # change its structure
    result_list = zip(*merged_list)
结果:

    [
    ('IMG_1', 'IMG_2', 'IMG_3', 'IMG_4', 'IMG_11', 'IMG_12', 'IMG_13', 'IMG_14', 'IMG_21', 'IMG_22', 'IMG_23', 'IMG_24'), 
    ('IMG_LABEL_1', 'IMG_LABEL_2', 'IMG_LABEL_3', 'IMG_LABEL_4', 'IMG_LABEL_11', 'IMG_LABEL_12', 'IMG_LABEL_13', 'IMG_LABEL_14', 'IMG_LABEL_21', 'IMG_LABEL_22', 'IMG_LABEL_23', 'IMG_LABEL_24')
    ]

我创建了一个dataTest,希望它的格式与您的格式相同:

List1 = [["img11", "img12", "img13"], ["label11", "label12", "label13", "label14"]]
List2 = [["img21", "img22", "img23"], ["label21", "label22", "label23", "label24"]]
List3 = [["img31", "img32", "img33"], ["label31", "label32", "label33", "label34"]]

dataTest = [List1, List2, List3]

print "Input:", dataTest
print

dataTest2 = [[],[]]

for cur_list in dataTest:
    dataTest2[0].extend(cur_list[0])
    dataTest2[1].extend(cur_list[1])

print "Output:", dataTest2
这将生成一个包含2个元素的列表,第一个元素包含所有图像,第二个元素包含所有标签:

Input: [[['img11', 'img12', 'img13'], ['label11', 'label12', 'label13', 'label14']], [['img21', 'img22', 'img23'], ['label21', 'label22', 'label23', 'label24']], [['img31', 'img32', 'img33'], ['label31', 'label32', 'label33', 'label34']]]

Output: [['img11', 'img12', 'img13', 'img21', 'img22', 'img23', 'img31', 'img32', 'img33'], ['label11', 'label12', 'label13', 'label14', 'label21', 'label22', 'label23', 'label24', 'label31', 'label32', 'label33', 'label34']]

认为它已经被合并了。或者你想要
dataTest=sum(dataTest,[])
,但你真的说不出来。你的结果矩阵缺少逗号或其他语法,因此很难说出你实际要求的是什么。处理列表列表变得非常麻烦,如果我是你,我会寻找一种更容易使用的数据类型。请不要使用“维度”一词,因为它使您看起来像是在使用多维数组(列表列表不是)。您可以添加示例输入和输出吗?请不要建议这样做。对列表使用
sum
具有二次性能。实际上,我想将所有列表中的所有图像添加到一个数组中。例如,如果所有列表中的图像数都是10000,我希望有一个包含10000个图像的数组。我看到了,答案已经更新了。如果您没事,请告诉我。
import*
是个坏主意。总是导入你想要使用的东西。我想要这样的东西:[[1,2]排成一行,而[2,3]]排成另一行row@akh你的数据不是已经是这样了吗!您想在list1到list50之间迭代并将其附加到datasetI吗?我有10000个图像,我将它们重塑为一行。它们有不同的标签。我根据它们的标签对它们进行了划分,并将其命名为列表1,2,…,50。现在我想按顺序合并它们。我的意思是,我想要一个所有这些的数组。@akh你问的问题真的很混乱。你能提供相同的输入和样本输出吗?这比前一个更具解释性one@VigneshKalai,我可以使用“zip(*)来查找您所说的内容。它提供了一个列表。我想要的是分离所有列表,然后合并在一起。可能是一个列表中的图像,然后是另一个列表中的图像。