匹配包含字符串的两个列表

2 python list match

我是Python的初学者,并且遇到了匹配包含字符串的两个列表的问题,

我使用正则表达式从txt Metafile中提取了Landsat图像的乐队名称,并有一个这样的列表;

bant = ['LT5YYYYYYYYYYYYYXXX02_B1.TIF', 'LT5YYYYYYYYYYYYYXXX02_B2.TIF','LT5YYYYYYYYYYYYYXXX02_B3.TIF', 'LT5YYYYYYYYYYYYYXXX02_B4.TIF', 'LT5YYYYYYYYYYYYYXXX02_B5.TIF', 'LT5YYYYYYYYYYYYYXXX02_B6.TIF', 'LT5YYYYYYYYYYYYYXXX02_B7.TIF']
Run Code Online (Sandbox Code Playgroud)

"YYYYYYYYYYYYY"是乐队特定的名称,从一个场景变为另一个场景.我将每个字符串分配给一个变量,然后分配给一个新的列表.

        bant1 = bant[0]
        bant2 = bant[1]
               .
               .
        bant7 = bant[6]
        bant = [bant1,bant2,bant3,bant4,bant5,bant6,bant7]
Run Code Online (Sandbox Code Playgroud)

另外通过使用Python os模块,我提取了与txt Metafile在同一目录下的GeoTIFF文件的名称,如下所示;

import os
import re
def mtl():
file=[]
path = os.getcwd()
for filelist in os.listdir(path):
    if filelist.endswith(".TIF"):
        file.append(filelist)
Run Code Online (Sandbox Code Playgroud)

输出:

file = ['LT5YYYYYYYYYYYYYXXX02_B1.TIF', 'LT5YYYYYYYYYYYYYXXX02_B2.TIF']
Run Code Online (Sandbox Code Playgroud)

所以我遇到的问题是如何比较这两个列表,"bant"和"file".并打印列表中的band是bant1,bant2.文件列表中的字符串数量是可更改的(可能某些文件被用户删除,因此不包含在文件列表中).

对不起我的英语不好.谢谢你的帮助

unu*_*tbu 5

你在寻找交叉路口吗?

In [16]: bant = ['LT5YYYYYYYYYYYYYXXX02_B1.TIF', 'LT5YYYYYYYYYYYYYXXX02_B2.TIF','LT5YYYYYYYYYYYYYXXX02_B3.TIF', 'LT5YYYYYYYYYYYYYXXX02_B4.TIF', 'LT5YYYYYYYYYYYYYXXX02_B5.TIF', 'LT5YYYYYYYYYYYYYXXX02_B6.TIF', 'LT5YYYYYYYYYYYYYXXX02_B7.TIF']

In [17]: file = ['LT5YYYYYYYYYYYYYXXX02_B1.TIF', 'LT5YYYYYYYYYYYYYXXX02_B2.TIF']

In [18]: set(bant).intersection(file)
Out[18]: set(['LT5YYYYYYYYYYYYYXXX02_B1.TIF', 'LT5YYYYYYYYYYYYYXXX02_B2.TIF'])
Run Code Online (Sandbox Code Playgroud)

请注意,sets是无序的,因此返回的结果set(bant).intersection(file)可能与bantor 给出的顺序不对应file.如果您需要保留,比如说bant,那么您可以使用

fileset = set(file)
[b for b in bant if b in fileset]
Run Code Online (Sandbox Code Playgroud)

此外,您的定义file方法可以简化为:

import glob
files = glob.glob('*.TIF')
Run Code Online (Sandbox Code Playgroud)

可以打印

通过使用bant = [bant1,bant2,bant3,bant4,bant5,bant6,bant7]列表找到(或匹配)的带是bant1,bant2".

但我们这样做之前,我可以尝试从命名的项目劝阻你bant:bant1,bant2,等?

你说在bant运行之前,项目的数量是未知的,那么你如何设法给每个项目自己的变量名称呢?这是可能的,但不是必要的.使用Python索引代替:bant[0]代替bant1,bant[1]而不是bant2等.通过执行此操作,您将能够bantbant使用编号变量名称中的每个项目更轻松地编程.