wshchz 发表于 2021-3-29 21:10:59

python剔除对称重复排列

想问各位用Python的itertools模块生成列表排列情况时,必有成对列表满足其中一列表的前半段等于另外一列表的后半段,同时该列表的后半段等于另外这个列表的前半段,如何剔除其中一个?
比方说我用以下代码生成6个元素的全排列列表:
import itertools as it
P =
list_p = list(it.permutations(P,6))
print(list_p)
list_p里面,有与这样的“对称对”,请问如何剔除其中一个(比方说剔除,该全排列表的其它排列元组也是类似这样的剔除方式,最后想剔除一半的排列元组生成新的排列列表)?

阿奇_o 发表于 2021-3-29 23:54:45

本帖最后由 阿奇_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]
查看完整版本: python剔除对称重复排列