python剔除对称重复排列
想问各位用Python的itertools模块生成列表排列情况时,必有成对列表满足其中一列表的前半段等于另外一列表的后半段,同时该列表的后半段等于另外这个列表的前半段,如何剔除其中一个?比方说我用以下代码生成6个元素的全排列列表:
import itertools as it
P =
list_p = list(it.permutations(P,6))
print(list_p)
list_p里面,有与这样的“对称对”,请问如何剔除其中一个(比方说剔除,该全排列表的其它排列元组也是类似这样的剔除方式,最后想剔除一半的排列元组生成新的排列列表)? 本帖最后由 阿奇_o 于 2021-3-30 00:05 编辑
用Python的“魔法命令”: __eq__() , 即可 {:10_333:}
import itertools as it
P =
list_p = list(it.permutations(P, 6)) # 排列以元组形式,存储在列表中
# print(list_p)
# r_p = tuple(reversed(P)) # 逆序
s_p = tuple(P + P[:3]) # "对称对"
print(s_p)
# for i in it.permutations(P, 6): # 直接用排列生成器,也可以
new_p = []
for i in list_p:
if i.__eq__(s_p):
# print(i)
continue
else:
new_p.append(i)
# print(new_p)
页:
[1]