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

Get combinations of elements in different folders but not combine the elements in the same folder, python

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

文件夹 table 中有三张图片:table_1.jpg、table_2.jpg、table_3.jpg 在折叠椅中有两张图片: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,我猜

您需要 itertools.product 来计算您想要的元组:

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')]

如果 fillenames 都在同一个列表中,您可以使用 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')]