在Python中将两个列表合并为一个

时间:2020-02-23 09:28:38

标签: python list

图片列表负面文件

directory="/resources/data"

negative='Negative'
negative_file_path=os.path.join(directory,negative)

negative_files=[os.path.join(negative_file_path,file) for file in  os.listdir(negative_file_path) if file.endswith(".jpg")]

negative_files.sort()

图像肯定文件列表

positive="Positive"

positive_file_path=os.path.join(directory,positive)

positive_files=[os.path.join(positive_file_path,file) for file in  os.listdir(positive_file_path) if file.endswith(".jpg")]

positive_files.sort()

我想创建另一个列表all_files,以使偶数索引包含包含positive_files的图像的路径,而奇数索引包含包含负文件的路径。 预期输出:

all_files[0]=positive_files[0] //image because 0th index of all_files is even.

all_files[1]=negative_files[0] //image because 1st index of all_files is odd.

all_files[2]=positive_files[1] //image because 2nd index of all_files is even.

all_files[3]=negative_files[1] //image because 3rd index of all_files is odd.

以此类推...

这是我尝试输入的伪代码的伪代码

a=[10,20,30]

b=[50,60,70,80,90,100,200]


m=len(a)

n=len(b)

l=m+n


i=j=k=0


c=[]

while i< l:

    if i%2==0:

        c[i]=a[j]

        j=j+1

    else:

        c[i]=b[k]

        k=k+1
print(c)

错误:索引超出范围。

所以,我的问题是如何创建这种类型的列表?

3 个答案:

答案 0 :(得分:0)

您的代码有多个问题。

  1. 您不能在列表上呼叫a[i],因为您的列表当前为空。您需要使用list.append()函数将项目添加到列表中。

  2. 您不会在while循环中递增i,这会触发无限循环。

  3. 如果正负文件的长度相同,则代码将运行。否则,您需要其他一些逻辑来填补索引的空白。您可以检查当前的jk是否分别大于lm,然后将较大列表中的所有其余元素添加到最终列表中。 这是一种可能,根据您的使用情况可能会有所不同。

答案 1 :(得分:0)

您想要的奇偶索引目标似乎不适用于不同的长度(这是导致错误的原因),并且忽略了使用Python轻松实现的更复杂的结构。

看看zip函数,并考虑建立一个元组列表。

答案 2 :(得分:0)

假设两个列表的长度相同

import itertools
all_files = list(itertools.chain.from_iterable(zip(positive_files, negative_files)))