我是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.文件列表中的字符串数量是可更改的(可能某些文件被用户删除,因此不包含在文件列表中).
对不起我的英语不好.谢谢你的帮助
你在寻找交叉路口吗?
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等.通过执行此操作,您将能够bant比bant使用编号变量名称中的每个项目更轻松地编程.
| 归档时间: |
|
| 查看次数: |
1864 次 |
| 最近记录: |