获取不同文件夹中的元素组合,但不要将同一文件夹中的元素组合,python

2024-04-20 00:17:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者,在我问这个问题之前,我努力在这里找到答案。我有不同的设计,有几张照片,我想比较他们的汉明距离。但是我不想比较同一个文件夹中的同一个设计文件的图像。我基于一个叫做Imagehash的库进行比较。在比较了不同的图像组合后,我想保留汉明距离得分最高的图像。让我用一个简单的例子来解释我想要什么:

在文件夹表中有三个图像:表1.jpg、表2.jpg、表3.jpg 在文件夹chair中有两个图像:chair_1.jpg、chair_2.jpg

我想得到的是文件的文件路径(我可以这样做),以便稍后使用Image.open()和imagehash.phash函数。组合应如下所示:

(table_1.jpg, chair_1.jpg), (table_1.jpg, chair_2.jpg), (table_2.jpg, chair_1.jpg ), (table_2.jpg, chair_2.jpg), (table_3.jpg, chair_1.jpg), (table_3.jpg, chair_2.jpg)

然后我必须在“\”后分开,然后使用groupby和itemgetter,我猜


Tags: 文件答案图像image路径文件夹距离table
1条回答
网友
1楼 · 发布于 2024-04-20 00:17:53

您需要^{}来计算所需的元组:

from itertools import product

table = ['table_1.jpg', 'table_2.jpg', 'table_3.jpg']
chair = ['chair_1.jpg', 'chair_2.jpg']

print(list(product(table, chair)))
# [('table_1.jpg', 'chair_1.jpg'), ('table_1.jpg', 'chair_2.jpg'), ('table_2.jpg', 'chair_1.jpg'), ('table_2.jpg', 'chair_2.jpg'), ('table_3.jpg', 'chair_1.jpg'), ('table_3.jpg', 'chair_2.jpg')]

如果fillename都在同一个列表中,则可以使用combinations并检查元素的开头是否不同:

from itertools import combinations
filenames = ['table_1.jpg', 'table_2.jpg', 'table_3.jpg', 'chair_1.jpg', 'chair_2.jpg']

print [(x,y) for x,y in combinations(filenames, 2) if x.split('_')[0] != y.split('_')[0]]
# [('table_1.jpg', 'chair_1.jpg'), ('table_1.jpg', 'chair_2.jpg'), ('table_2.jpg', 'chair_1.jpg'), ('table_2.jpg', 'chair_2.jpg'), ('table_3.jpg', 'chair_1.jpg'), ('table_3.jpg', 'chair_2.jpg')]

相关问题 更多 >